3.go 函数

1.函数
	Go 里面有三种类型的函数:
	1.普通的带有名字的函数
	2.匿名函数或者lambda函数
	3.方法

2.传递变长参数
	func myFunc(a, b, arg ...int) {}
	这个函数接受一个类似某个类型的 slice 的参数
	例如:
		func min(s ...int) int {}
		x := min(1, 3, 2, 0)
		slice := []int{7,9,3,5,1}
		x = min(slice...)

	变长参数可以作为对应类型的 slice 进行二次传递。
	如果一个变长参数的类型没有被指定,则可以使用默认的空接口 interface{},这样就可以接受任何类型的参数

3.defer
	关键字 defer 允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数
	当有多个 defer 行为被注册时,它们会以逆序执行(类似栈,即后进先出
	关键字 defer 允许我们进行一些函数执行完成后的收尾工作 : 
		1.关闭文件流
			defer file.Close()
		2.解锁一个加锁的资源
			mu.Lock()  
			defer mu.Unlock()
		3.打印最终报告
			printHeader()  
			defer printFooter()
		4.关闭数据库链接
			defer disconnectFromDB()
		5.使用 defer 语句实现代码追踪
		6.使用 defer 语句来记录函数的参数与返回值

4.内置函数
	https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.5.md

5.将函数作为参数
	func main() {
		callback(1, Add)
	}

	func Add(a, b int) {
		fmt.Printf("The sum of %d and %d is :%d\n",a, b, a+b)
	}
	func callback(y int, f func(int,int)) {
		f(y,2)
	}

6.闭包
	defer 语句和匿名函数
	关键字 defer (详见第 6.4 节)经常配合匿名函数使用,它可以用于改变函数的命名返回值。

	匿名函数还可以配合 go 关键字来作为 goroutine 使用(详见第 14 章和第 16.9 节)。

	匿名函数同样被称之为闭包(函数式语言的术语):它们被允许调用定义在其它环境下的变量。闭包可使得某个函数捕捉到一些外部状态,例如:函数被创建时的状态。另一种表示方式为:一个闭包继承了函数所声明时的作用域。这种状态(作用域内的变量)都被共享到闭包的环境中,因此这些变量可以在闭包中被操作,直到被销毁,详见第 6.9 节中的示例。闭包经常被用作包装函数:它们会预先定义好 1 个或多个参数以用于包装,详见下一节中的示例。另一个不错的应用就是使用闭包来完成更加简洁的错误检查(详见第 16.10.2 节)

	func Adder() func(int) int {
	var x int  // 只初始化一次
	return func(delta int) int {
		x += delta
		return x
	}
	}


https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.8.md

 

http://www.runoob.com/go/go-functions.html

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值