go函数(方法)返回值是有返回值的函数

晚上被别人问了类似的问题,特意写个笔记总结一下,下次谁问我我就直接转发…
QAQ 才疏学浅,博文标题也不知道该怎么描述我想表达的意思,来段程序吧:

package main

import "fmt"

func Test(person string)(work func()string)  {
    /*
        Do someting
    */
    work =  func()string{
        return (person + " is working")
    }
    return
}
func main() {
    p := Test("Sergey")
    fmt.Println(p)      //输出结果:0x10b2790
    fmt.Println(p())    //输出结果:Sergey is working
                        //我想说的重点应该是在这里
}

func Test(person string)(work func()string) 这个函数的签名展示了它的返回值类型是 func()string,这在Test里是个函数,
p := Test("Sergey")执行后,P的真实类型是func() string,要想得到字符串,应该使用 p()

如果Test函数签名规定了返回值没有命名,可在Test里应该由匿名函数实现并且返回相应类型的值.我想说的大概是如下意思: ~_~

func Test(person string)(func()string)  {
    /*
        Do someting
    */
    return func()string{
        return (person + " is working")
    }
}

你可能感兴趣的:(golang,编程语言)