go - 如何传递转换为接口(interface){}的函数

标签 go

我正在尝试编写一个函数,该函数将打开一个文件,使用它作为参数接收的另一个函数从每一行构建一个对象,并返回这些对象的一部分,类似于:

func readFile(filename string, transform func(string) interface {}) (list []interface {}) {
    if rawBytes, err := ioutil.ReadFile(filename); err != nil {
        log.Fatal(err)
    } else {
        lines := strings.Split(string(rawBytes), "\n")
        for i := range lines {
             t := transform(lines[i])
             list = append(list, t)
        }
    }
    return list
}

我尝试像这样使用它:

func transform(line string) (myObject *MyType) {
    fields := strings.Split(line, "\t")

    myObject.someField = fields[0]
    myObject.anotherField = fields[1]
    (...)
    return myObject
}

在其他地方我已经这样调用了原始方法:

readFile("path/to/file.txt", transform)

这给了我一个错误:不能在函数参数中使用transform (type func(string) *MyType) as type func(string) interface {}

Go 中有没有不同的方法来解决这个问题?

编辑:这是我尝试做的一个类似但非常简化的示例:http://play.golang.org/p/jLAsYojkII

最佳答案

只需将您的 transform 函数签名更改为 func transform(s string) interface{},但我认为这不是最好的解决方案。

关于go - 如何传递转换为接口(interface){}的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076773/

相关文章:

go - 如何分配空的CString?

go - 谁在使用我的 Go 包

docker-compose oci runtime error 找不到可执行文件(在链接容器中)

user-interface - wxWidgets 和 Golang

go - 什么是 locationName 标签以及如何使用它们?

go - 将所有外部 golang 模块导入一个文件,然后从该文件导入?

image - 无效的 JPEG 格式 : missing SOI marker

amazon-web-services - 无法将消息从 lambda 发送到 aws sqs,并且 aws-sdk 没有返回任何错误

go - 我应该如何在 Go 1.6 中使用 vendor?

select - 跳出选择循环?