go语言学习(四)- 函数

一、签名

1、go支持函数类型的变量和赋值。例如:

package main
import "fmt"
var pr = fmt.Println
var f = func(){
      pr("Hello")
}
var g func()
func main(){
       g = f
       g()
}


二、参数
1、使用 godoc fmt Println,可以看到它的签名是:
   func Println(a ...interface{}) (n int,err error)
这个...表示Println的参数a可以接受多个值,这个interface{}表示a是空界面类型,也就是可以接受几乎所有类型的值。

三、返回语句
1、其实对于每个Go程序,我们都是在利用它的副作用,因为main函数的签名也没有副作用。这和C程序不同。C程序的main函数会返回
一个整数值指出程序的错误。在Go里,这需要用到os包的Exit函数:
    func Exit(code int)


四、函数调用


五、闭包

1、我们虽然不可以在一个函数里直接声明另外一个函数,但可以在一个函数中声明一个函数类型的变量。此时的函数称为闭包(closure)。例如:

package main

import "main"

func main(){

        add := func(base int) func(int) int {

              return func(n int) int {

                       return base + n 

             }

        }

        add5 := add(5)

        fmt.Println(add5(10))

}


六、压后

1、压后defer语句注册一个函数。当defer所在函数返回时,调用defer注册的函数。例如

func f(){

      err := lock(l)

      defer unlock(l)

      if err {return}

      go()

}

defer确保unlock一定会在f()执行结束时执行。

defer的表达式必须是函数或方法调用。每次defer语句执行时,对函数的参数求值但不会立即调用函数。压后语句注册的函数要等到defer所在的函数返回时,才按照LIFO(后进先出)的次序依次执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值