Function 作为参数动态创建的go pass函数
嗯。我很难理解“我的打印机”到底是怎么回事 让我一步一步走(如果有什么错误,请纠正我)Function 作为参数动态创建的go pass函数,function,go,closures,Function,Go,Closures,嗯。我很难理解“我的打印机”到底是怎么回事 让我一步一步走(如果有什么错误,请纠正我) 1.“敬礼”结构已创建 2.调用“问候”功能 2.调用带有strgin“!!!”的“CreatePrinterFunction”。此函数返回一个“MyPrinter”(witch是一个接受字符串但不返回任何内容的函数) 3.变量“message”和“defaultMessage”用字符串设置 现在问题来了,我不明白那些人到底在做什么 CreatePrinterFunction返回一个: 该函数literal实
1.“敬礼”结构已创建
2.调用“问候”功能
2.调用带有strgin“!!!”的“CreatePrinterFunction”。此函数返回一个“MyPrinter”(witch是一个接受字符串但不返回任何内容的函数)
3.变量“message”和“defaultMessage”用字符串设置
现在问题来了,我不明白那些人到底在做什么
CreatePrinterFunction
返回一个:
该函数literal实现MyPrinter接口,该接口由任何接受字符串参数且不返回任何内容的函数实现:
type MyPrinter func(s string)
(请注意,提供的代码段中的MyPrinter
定义在末尾包含一个额外的()
,它不起任何作用)
然后,创建的实现MyPrinter接口的函数作为Greet
函数的do
参数传递:
func Greet(salute Salute, do MyPrinter) {
当Greet
中的代码运行do(message)
时,将调用创建的函数literal,该函数反过来运行与fmt.Println(message+custom)
等效的函数
这是一种相当复杂的方法来做一些简单的事情。:-) “我的打印机”是什么意思。它是专门寻找一个获取字符串并返回类型为“MyPrinter”的函数,还是只寻找一个获取字符串但不返回任何内容的函数。如果有多个函数返回“MyPrinter”,会发生什么情况
do MyPrinter
仅仅意味着函数接受名为do
的参数,该参数必须实现接口MyPrinter
。您可以有任意多个函数实现MyPrinter
接口,其中任何一个都可以作为该函数的参数提供。好的,现在我知道了。我认为type MyPrinter
的工作原理类似于C、PHP中的define
,但它需要创建一种新类型的变量,如int、string
,这种类型的行为类似于类
type MyPrinter func(s string)
func Greet(salute Salute, do MyPrinter) {