以下是重現此代碼的方法:https ://play.golang.org/p/ostuT1QFV4C **我正在嘗試編寫一個函數,該函數允許我傳遞用于獲取數據并將其轉換為字符串的任何方法。這是為了更好地理解如何在 Go 中使用高階函數。func getConfigsFunc(getData func() ([]byte, error)) string { b, err := getData() if err != nil { fmt.Print(err) } str := string(b) // convert content to a 'string' return str}我嘗試以幾種不同的方式使用此功能,但沒有一個能正常工作。例如,在我可能使用它的一種情況下,我可以構造一個匿名函數,該函數封閉一個變量并返回一個不接受參數并返回的函數([]byte, error)。從理論上講,這種方法將允許我包裝任何獲取數據的代碼,只要我可以返回一個不接受參數并返回的匿名方法([]byte, error)。然而,我的嘗試卻失敗了。首先,我嘗試了這個:getNfsConfigsFunc := func() ([]byte, error) { return ioutil.ReadFile("nfsConfigs.json") }()但是,我得到:賦值不匹配:1 個變量,但 func 文字返回 2 個值(作為參考,ioutil.ReadFile(..)返回([]byte, error)。)我假設(可能是錯誤的)我的錯誤意味著匿名函數立即執行(就像Javascript中的IIFE),所以我嘗試將內部部分包裝在函數中(嘗試強制匿名函數返回一個函數,而不是2 個值),如下所示:getNfsConfigsFunc := func() ([]byte, error) { return nil, func() ([]byte, error) { return ioutil.ReadFile("nfsConfigs.json") } }()但是 IDE 強迫我在匿名函數的一部分中添加“nil”,這似乎違反了我的意圖(除非我誤解了某些內容)。無論如何,它給了我這個錯誤:./main.go:247:20: 賦值不匹配:1 個變量,但 func 文字返回 2 個值 ./main.go:248:15:不能使用 func 文字 (type func() ([]byte, error)) 作為類型返回參數錯誤: func() ([]byte, error) 未實現 error (缺少 Error 方法)我可以用 Go 做我想做的事情嗎?為了完整起見,內容nfsConfigs.json如下所示:{ "nfsURLBase" : "http://example.url.path.com/", "nfsFsBase" : "/data/nfs/path/to/files"}
1 回答

慕神8447489
TA貢獻1780條經驗 獲得超1個贊
這東西
getNfsConfigsFunc := func() ([]byte, error) {
return ioutil.ReadFile("nfsConfigs.json")
}()
不創建匿名函數。由于訓練,它調用()匿名函數。
它應該只是:
getNfsConfigsFunc := func() ([]byte, error) {
return ioutil.ReadFile("nfsConfigs.json")
}
- 1 回答
- 0 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消