函数也是一种数据类型,比如定义一个匿名函数,赋值给 parseFunc:
parseFunc := func(text string) {
fmt.Println("Parse")
}
parseFunc 是函数类型,直接调用就好了。
parseFunc()
切换下思路,将函数变量赋值给结构成员。
先定义一个结构体,如下:
type Parser struct {
ParseFunc func(text string)
}
Parser 的成员 ParseFunc 是类型为 func(text string) 的函数。
func main() {
parser := Parser{ParseFunc: func(text string) {
fmt.Println("Parse")
}}
parser.ParseFunc()
}
main 函数中创建 Parser 并初始化 ParseFunc,接着,我们只需要 parser.ParseFunc() 即可调用,同样可以执行。
更进一步补充:
修改为和题主问题中的函数类型一样,只要修改下 ParseFunc 的接口定义,如下:
type ParseResult struct {
Urls []string
}
type Parser struct {
ParseFunc func(text string) ParseResult
}
将 Parser 的成员 ParseFunc 是类型修改为 func(text string) ParseResult 的函数,增加返回值类型。
创建 parser 的代码也需要修改:
func main() {
parser := Parser{ParseFunc: func(text string) ParseResult {
return ParseResult{
Urls: []string{"https://www.baidu.com", "https://www.sina.com"},
}
}}
urls := parser.ParseFunc()
for _, url := range urls {
fmt.Println(url)
}
}
其实只是为 ParseFunc 增加了返回值,获取到 urls 自己决定具体怎么处理它们。