确定。我在使用“MyPrinter”理解究竟发生了什么事时遇到了一些麻烦
让我一步一步走(如果出了问题,请纠正我)
1.创建“敬礼”结构
2.呼叫“问候”功能
2.a使用strgin“!!!”调用“CreatePrinterFunction”。这个函数返回一个“MyPrinter”(女巫是一个接受字符串并且什么都不返回的函数)
3.使用字符串
现在问题在于,我不明白那些做什么(“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("!!!"))
}
答案 0 :(得分:2)
CreatePrinterFunction
会返回function literal:
return func (s string) {
fmt.Println(s + custom)
}
该函数文字实现MyPrinter接口,该接口是由任何带有字符串参数且不返回任何内容的函数实现的接口:
type MyPrinter func(s string)
(请注意,提供的代码段中的MyPrinter
定义在最后包含额外的()
,但不执行任何操作。
然后,创建的实现MyPrinter接口的函数作为do
函数的Greet
参数传递:
func Greet(salute Salute, do MyPrinter) {
当Greet
内的代码运行do(message)
时,将调用创建的函数文字,而后者则运行相当于fmt.Println(message + custom)
的内容。
做一些简单的事情是一种非常复杂的方式。 : - )