以下是重現(xiàn)此代碼的方法:https ://play.golang.org/p/ostuT1QFV4C **我正在嘗試編寫一個函數(shù),該函數(shù)允許我傳遞用于獲取數(shù)據(jù)并將其轉(zhuǎn)換為字符串的任何方法。這是為了更好地理解如何在 Go 中使用高階函數(shù)。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}我嘗試以幾種不同的方式使用此功能,但沒有一個能正常工作。例如,在我可能使用它的一種情況下,我可以構(gòu)造一個匿名函數(shù),該函數(shù)封閉一個變量并返回一個不接受參數(shù)并返回的函數(shù)([]byte, error)。從理論上講,這種方法將允許我包裝任何獲取數(shù)據(jù)的代碼,只要我可以返回一個不接受參數(shù)并返回的匿名方法([]byte, error)。然而,我的嘗試卻失敗了。首先,我嘗試了這個:getNfsConfigsFunc := func() ([]byte, error) { return ioutil.ReadFile("nfsConfigs.json") }()但是,我得到:賦值不匹配:1 個變量,但 func 文字返回 2 個值(作為參考,ioutil.ReadFile(..)返回([]byte, error)。)我假設(shè)(可能是錯誤的)我的錯誤意味著匿名函數(shù)立即執(zhí)行(就像Javascript中的IIFE),所以我嘗試將內(nèi)部部分包裝在函數(shù)中(嘗試強(qiáng)制匿名函數(shù)返回一個函數(shù),而不是2 個值),如下所示:getNfsConfigsFunc := func() ([]byte, error) { return nil, func() ([]byte, error) { return ioutil.ReadFile("nfsConfigs.json") } }()但是 IDE 強(qiáng)迫我在匿名函數(shù)的一部分中添加“nil”,這似乎違反了我的意圖(除非我誤解了某些內(nèi)容)。無論如何,它給了我這個錯誤:./main.go:247:20: 賦值不匹配:1 個變量,但 func 文字返回 2 個值 ./main.go:248:15:不能使用 func 文字 (type func() ([]byte, error)) 作為類型返回參數(shù)錯誤: func() ([]byte, error) 未實(shí)現(xiàn) error (缺少 Error 方法)我可以用 Go 做我想做的事情嗎?為了完整起見,內(nèi)容nfsConfigs.json如下所示:{ "nfsURLBase" : "http://example.url.path.com/", "nfsFsBase" : "/data/nfs/path/to/files"}
1 回答
慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個贊
這東西
getNfsConfigsFunc := func() ([]byte, error) {
return ioutil.ReadFile("nfsConfigs.json")
}()
不創(chuàng)建匿名函數(shù)。由于訓(xùn)練,它調(diào)用()匿名函數(shù)。
它應(yīng)該只是:
getNfsConfigsFunc := func() ([]byte, error) {
return ioutil.ReadFile("nfsConfigs.json")
}
- 1 回答
- 0 關(guān)注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消
