首先,看一个函数返回值的问题
package main
import (
"fmt"
)
func main() {
fmt.Println(test())
}
func test() (a int) {
a = 1
fmt.Println("can i see ?")
return
}
上面这个函数输出的是 :
can i see ?
1
package main
import (
"fmt"
)
func main() {
fmt.Println(test())
}
func test() (a int) {
a = 1
fmt.Println("can i see ?")
return 2
}
上面这个函数输出的是:
can i see ?
2
当return后面为空是,函数声明时的 (a int) 会把 a 作为返回值,当 return 不为空时,会把 return 后面的值作为返回值
再看文章提到的那个例子:
func Test(person string) (work func() string) {
work = func() string {
return (person + " is working")
}
return
}
func main() {
p := Test("Sergey") // p 得到的是一个匿名函数,因为(work func() string) 指明Test函数返回一个work的匿名函数,且 return 后面为空
fmt.Println(p) // 输出结果:0x10b2790,这里输出的是work匿名函数的一个地址
fmt.Println(p()) // 输出结果:Sergey is working,这里执行了 work 函数
}