通道的基本特性

1.一个FIFO的阻塞队列

2.发送和接受的都是副本

3.重复close会panic,已经close的通道再次写入会panic

4.值为nil的通道上进行读写会阻塞

5.双向通道转换成单向通道是自动的,可以用来限制通道的使用者只进行读或者写操作

高阶函数
// 先定义一个函数类型
type calculateFunc func(x int, y int) (int, error)
//输入一个函数,返回一个币包函数,动态实现逻辑,注意被捕获变量的修改可能会传递到闭包外面
func genCalculator(op operate) calculateFunc {
	return func(x int, y int) (int, error) {
		if op == nil {
			return 0, errors.New("invalid operation")
		}
		return op(x, y), nil
	}
}