Go语言匿名函数返回值如何正确传递到外部函数?

go语言匿名函数返回值如何正确传递到外部函数?

Go语言匿名函数返回值的有效处理方法

在Go语言编程中,函数内部嵌套匿名函数并处理其返回值是常见场景。本文将探讨如何将匿名函数的错误信息正确传递到外部函数,并提供改进后的代码示例。

问题描述:

假设register函数调用api.registerclient函数,后者接收两个匿名函数作为回调。其中一个匿名函数使用mapstructure.decode进行解码,可能返回错误。目标是将此错误信息传递回register函数。然而,直接返回匿名函数的返回值是不可行的。

立即学习“go语言免费学习笔记(深入)”;

原始代码: (略,与原文相同)

解决方案:

为了解决这个问题,需要在register函数中声明一个变量来存储匿名函数中的错误。在匿名函数内部将错误赋值给此变量,最后register函数返回该变量。

改进后的代码:

func (client *ClientLoginModel) register() error {    if len(client.ID) == 0 {        log.InfoW("client register", "clientModel", client)        client.GetInfo()        var err error // 声明一个变量存储错误        api.RegisterClient(*client, func(json *ResponseJson) {            err = mapstructure.Decode(json.Data, client) // 将错误赋值给 err            if err != nil {                log.ErrorW("client info parse error", "err", err)                return            } else {                log.InfoW("client register success", "id", client.ID)                log.InfoW("write config")                configMaps := make(map[string]interface{})                configMaps["id"] = client.ID                configMaps["userID"] = client.UserID                err = base.SetConfigs(configMaps) // 将错误赋值给 err                if err != nil {                    log.ErrorW("write config error", "err", err)                    return                }            }        }, func(json *ResponseJson) {            // 失败            log.ErrorW("client register error", "err", json)            return        })        return err // 返回存储的错误    }    return nil}

登录后复制

本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。

如若转载请注明出处:http://www.down96.com/tutorials/13083.html

热心网友热心网友
上一篇 2025-04-11 17:11
下一篇 2025-04-11 17:11

相关推荐

本站[软件指南]所有内容来自互联网投稿或AI智能生成,并不代表软件指南的立场。