首先,看一个函数返回值的问题

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 函数
}