慕码人2483693
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{}) = Infofunc 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.Infofunc main() { logger("something") logger = mainLogger.Error logger("Some other thing")}输出(在Go Playground上尝试):[Info] something[Error] Some other thing
0
0