登录
首页 >  Golang >  Go问答

创建一个接受匿名函数作为参数的高阶函数

来源:stackoverflow

时间:2024-03-24 16:36:41 103浏览 收藏

本篇文章讨论了如何在 Go 语言中创建一个接受匿名函数作为参数的高阶函数。高阶函数允许将函数作为参数传递,并返回另一个函数。文章介绍了使用匿名函数来封装数据获取代码,并尝试将其传递给高阶函数。文章还讨论了遇到的错误,并提供了正确的解决方案。

问题内容

以下是重现此代码的方法: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 文字(类型 func() ([]byte, error)) 作为返回参数中的类型错误: func() ([]byte, error) 没有实现error(缺少error方法)

我可以用 go 做我想做的事情吗?

为了完整起见,nfsconfigs.json 的内容如下所示:

{
    "nfsURLBase" : "http://example.url.path.com/",
    "nfsFsBase" : "/data/nfs/path/to/files"
}

解决方案


这个东西

getnfsconfigsfunc := func() ([]byte, error) {
        return ioutil.readfile("nfsconfigs.json")
}()

不创建匿名函数。由于训练(),它调用匿名函数。

应该是:

getNfsConfigsFunc := func() ([]byte, error) {
        return ioutil.ReadFile("nfsConfigs.json")
}

今天关于《创建一个接受匿名函数作为参数的高阶函数》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>