2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
Go是一種靜態(tài)類(lèi)型的語(yǔ)言,如果您要按名稱(chēng)調(diào)用函數(shù)或方法,則編譯器將無(wú)法檢查您提供的參數(shù)是否與函數(shù)的簽名匹配。
而是使用函數(shù)變量:當(dāng)前保存方法或函數(shù)名稱(chēng)的變量可以是保存函數(shù)或方法value的函數(shù)類(lèi)型的變量。
假設(shè)我們具有以下日志記錄功能:
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
- 2 回答
- 0 關(guān)注
- 549 瀏覽
添加回答
舉報(bào)