为了账号安全,请及时绑定邮箱和手机立即绑定

golang变量替换

golang变量替换

Go
侃侃无极 2021-04-05 14:15:28
如何在go中使用变量替换?例如,我有以下代码:debug_level := "Info"log.Info("Debug Test")我可以将变量debug_level用于日志函数,而不是传递直接参数吗?就像是:debug_level := "Info"log.${debug_level}("Debug Test")谢谢你。
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

Go是一种静态类型的语言,如果您要按名称调用函数或方法,则编译器将无法检查您提供的参数是否与函数的签名匹配。


而是使用函数变量:当前保存方法或函数名称的变量可以是保存函数或方法value的函数类型的变量。


假设我们具有以下日志记录功能:


func Info(args ...interface{}) {

    fmt.Print("[Info] ")

    fmt.Println(args...)

}


func Error(args ...interface{}) {

    fmt.Print("[Error] ")

    fmt.Println(args...)

}

您可以这样使用它:


var logger func(...interface{}) = Info


func main() {

    logger("something")

    logger = Error

    logger("Some other thing")

}

输出将是(在Go Playground上尝试):


[Info] something

[Error] Some other thing

还要注意,这也适用于方法,而不仅仅是功能:


type Logger struct{}


func (l Logger) Info(args ...interface{}) {

    fmt.Print("[Info] ")

    fmt.Println(args...)

}


func (l Logger) Error(args ...interface{}) {

    fmt.Print("[Error] ")

    fmt.Println(args...)

}

使用它:


var mainLogger = Logger{}


var logger func(...interface{}) = mainLogger.Info


func main() {

    logger("something")

    logger = mainLogger.Error

    logger("Some other thing")

}

输出(在Go Playground上尝试):


[Info] something

[Error] Some other thing


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 485 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信