好的。我很难理解“MyPrinter”到底发生了什么让我一步一步来(如果有问题请纠正我)
1. 创建了“Salute”结构
2. 调用“Greet”函数
2.a使用字符串“!!!”调用“CreatePrinterFunction”。此函数返回一个“MyPrinter”(witch 是一个接受字符串但不返回任何内容的函数)
3. 使用字符串设置变量“message”和“defaultMessage”
现在问题来了,我不明白那些 do("str") 到底在做什么
package main
import "fmt"
type Salute struct {
name string
greeting string
}
type MyPrinter func (s string) ()
func Greet(salute Salute, do MyPrinter) {
message, defaultMessage := CreateMessage(salute.name, salute.greeting, "noName")
do(message)
do(defaultMessage)
}
func Print(s string) {
fmt.Print(s)
}
func PrintLine(s string) {
fmt.Println(s)
}
func CreatePrinterFunction(custom string) MyPrinter {
return func (s string) {
fmt.Println(s + custom)
}
}
func CreateMessage(name string, greeting ...string) (message string, defaultMessage string) {
message = name + " " + greeting[0]
defaultMessage = "hey " + name
return
}
func main() {
var s = Salute{"Joe", "hello"}
// Greet(s, PrintLine)
Greet(s, CreatePrinterFunction("!!!"))
}