Go中的函数类型
我试图理解Go中的函数类型,所以我尝试使用以下代码Go中的函数类型,go,Go,我试图理解Go中的函数类型,所以我尝试使用以下代码 package main import "fmt" func myfn1(i string) { fmt.Println(i) } func myfunc2(firstName string, lastName string) string { return "Hello "+ firstName + " " + lastName + "!" } func test(do func(string), val string
package main
import "fmt"
func myfn1(i string) {
fmt.Println(i)
}
func myfunc2(firstName string, lastName string) string {
return "Hello "+ firstName + " " + lastName + "!"
}
func test(do func(string), val string) {
do(val)
}
func test1(t func(string,string), fname string, lname string) string {
opt := t(fname, lname)
return opt
}
func main() {
test(myfn1, "Aishu")
greet := test1(myfunc2, "Aishu","S")
fmt.Println(greet)
}
它抛出下面的错误
功能类型在中描述为: 函数类型表示具有相同属性的所有函数的集合 参数和结果类型 这里清楚地提到,
具有相同参数和结果类型的函数
传递给主程序的函数定义和函数所需的定义各不相同。如果您仔细查看下面的函数,您已经将t
作为参数传递给test1
,它只返回一个值给opt
,这就是错误的原因
t(fname,lname)用作值
第二个错误是:
无法将myfunc2(类型func(字符串,字符串)字符串)用作类型
test1参数中的func(字符串,字符串)
因为如果您将传递给test1
的函数类型视为参数,那么在test1
中定义的参数类型是不同的
请检查下面的工作代码
package main
import "fmt"
func myfn1(i string) {
fmt.Println(i)
}
func myfunc2(firstName string, lastName string) string{
return "Hello "+ firstName + " " + lastName + "!"
}
func test(do func(string), val string){
do(val)
}
func test1(t func(string,string) string, fname string, lname string) string{
opt := t(fname,lname)
return opt
}
func main() {
test(myfn1, "Aishu")
greet := test1(myfunc2, "Aishu","S")
fmt.Println(greet)
}
示例您有两个不相关的问题
第一:
t(fname,lname)用作值
您试图将t(fname,lname)
的返回值赋给变量,但t()
不返回任何内容
第二点:
在test1的参数中,不能将myfunc2(类型func(string,string)string)用作类型func(string,string)
这是不言自明的。您试图将一个返回字符串func(string,string)string的函数传递给一个期望函数不返回任何内容的函数func(string,string)nit:因为两个问题的解决方案是相同的(即使t
类型为func(string,string)字符串
,我不会说它们无关,对吗?:)