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

编写将匿名函数作为参数传递的高阶函数

编写将匿名函数作为参数传递的高阶函数

Go
智慧大石 2023-07-17 17:49:28
以下是重现此代码的方法: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")

}


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

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