Ok。ここで「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("!!!"))
}