登录
首页 >  Golang >  Go问答

如何获取go中一个包的所有变量?

来源:stackoverflow

时间:2024-02-27 22:21:25 312浏览 收藏

大家好,我们又见面了啊~本文《如何获取go中一个包的所有变量?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我在一个包中定义了一些错误代码的全局变量。它们的类型是包异常中用户定义的结构体。 (go 不支持 const 结构,所以我使用 var)

var (
    ErrorCodeSuccess = Error{Code: 0, ErrDetail: "success"} // 
)

var (
    ACodeDefault                        = Error{Code: 10000, ErrDetail: "detail1"}    
    ACodeInValidParams                  = Error{Code: 10100, ErrDetail: "detail2"}    
)

var(
   BCodeDefault....// and so on
)

var(
   CCodeDefault....// and so on
)

如您所见,error 实例定义了错误代码及其默认详细信息。

但是当用户确实想要指定其详细信息时,用户可以更改它,例如

acodedefault.renew("更多指定详细信息").

此方法将返回此错误的副本以及新的详细信息。

这是我的问题,用户指定的详细信息可能很多。

例如,当用户返回代码10000时,不同的请求中可能有100个不同的详细信息。

但有时,我希望默认详细信息以及代码类似于 10000-details1,以便我可以向监控系统报告。

所以我需要一个像mapcodetodefaultdetails(code int)这样的函数。然后,我希望我可以反映所有变量来构建一个地图(code->默认详细信息),以便我可以实现这个方法。

有什么办法可以实现这个目标吗?


正确答案


reflect 包不提供枚举包中变量的方法。

以下是实现该功能的一种方法:添加注册函数以在地图中记录代码的错误详细信息:

var codedetails = map[int]string{}

func register(e error) error {
    codedetails[e.code] = e.details
    return e
}

声明变量时使用注册函数:

var errorcodesuccess = register(error{code: 0, errdetail: "success"})

在mapcodetodefaultdetails中使用地图:

func mapCodeToDefaultDetails(int code) string {
      return codeDetails[code]
 }

好了,本文到此结束,带大家了解了《如何获取go中一个包的所有变量?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>