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) {