我正在尝试编写一个函数来打开一个文件,使用它作为参数接收的另一个函数从每一行构建一个对象并返回这些对象的切片,类似于:
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)
这给了我一个错误:cannot use transform (type func(string) *MyType) as type func(string) interface {} in function argument
在Go中有没有不同的方法来解决这个问题?
编辑:这是我尝试做的类似但非常简化的示例:http://play.golang.org/p/jLAsYojkII
答案 0 :(得分:2)
只需将transform
功能签名更改为func transform(s string) interface{}
,但我认为这不是最佳解决方案。