Go语言的函数特性

函数声明

Go语言的每一个函数声明都包含一个函数名、一个形参列表、一个可选的返回列表以及函数体:func name(parameter-list) (result-list) {body}

上述函数声明的语法通式中,若函数仅有一个或没有返回值,返回列表的圆括号可以省略。

函数的类型称作函数签名。当两个函数拥有相同的形参列表和返回列表时(形参和返回值的名字不作为判断依据),这两个函数的类型或签名是相同的。C++中的函数传参可以使用值传递或引用传递,而Go中只有值传递(虽然Go也有引用概念,但与C++并不相同)。

有些函数的声明没有函数体,这说明这个函数使用除了Go以外的语言实现,这样的声明仅定义了该函数的签名。

函数变量

Go语言中的函数也有类型,其零值为nil,而且它们可以赋给变量或者传递或者从其他函数中返回。函数变量可以像其他函数一样调用。

func square(n int) int {
    return n * n
}

f := square
fmt.Printf("%T\n", f) //输出 func(int) int
fmt.Println(f(3)) //输出 9

匿名函数

命名函数只能在包级别的作用域中声明,但没有函数名的匿名函数可以在函数体内声明。特别的是,匿名函数能够使用外层函数中的变量:

func squares() func() int {
    var x int
    return func() int {
        x++
        return x * x
    }
}

func main() {
    f := squares()
    fmt.Println(f()) // 1
    fmt.Println(f()) // 4
    fmt.Println(f()) // 9
}

 

                                                                                                                                  本文部分内容摘自《Go程序设计语言》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值