函数是日常工作中十分常用的,无论是C语言,C++、Java、Python、JavaScript都是必不可少的。
Go语言函数的特点如下:
1func关键字开头。
2支持多返回值。
3支持具名返回值。
4支持递归调用。
5支持同类型的可变参数。
6支持defer,让函数优雅的返回。
一、GO语言中如何让函数变成一等公民的?
1正常创建。标准库代码如下
//$GOROOT/src/fmt/print.gofuncnewPrinter()*pp{p:=ppFree.Get().(*pp)p.panicking=falsep.erroring=falsep.wrapErrs=falsep.fmt.init(p.buf)returnp}
2在函数内创建
在hexdumpWords函数内定义了一个匿名函数(被赋值给p1)
//$GOROOT/src/runtime/print.gofunchexdumpWords(p,enduintptr,markfunc(uintptr)byte){p1:=func(xuintptr){varbuf[2*sys.PtrSize]bytefori:=len(buf)-1;i=0;i--{ifx0xF10{buf[i]=byte(x0xF)+0}else{buf[i]=byte(x0xF)-10+a}x=4}gwrite(buf[:])}......}
3作为类型
//$GOROOT/src/net/