go语言学习(四)- 函数

zjt1388 · · 867 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一、签名

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(后进先出)的次序依次执行。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:zjt1388

查看原文:go语言学习(四)- 函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

867 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传