函数
- 在Go语言中,函数是第一类对象,我们可以将函数保持到变量中。具名函数是匿名函数的一种特例。
- 当匿名函数引用了外部 作用域中的变量时就成了闭包函数,闭包函数是函数式编程语言的核心。
- defer 语句延迟执行了一个匿名函数。因为这个匿名函数捕获了外部函数的 局部变量 ,这种函数我们一般叫闭包。
- 传参:
Go语言中,如果以切片为参数调用函数时,有时候会给人一种参数采用了传引用的 方式的假象:因为在被调用函数内部可以修改传入的切片的元素。
其实,任何可以 通过函数参数修改调用参数的情形,都是因为函数参数中显式或隐式传入了指针参数。
函数参数传值的规范更准确说是只针对数据结构中固定的部分传值,例如字符串或切片对应结构体中的指针和字符串长度结构体传值,但是并不包含指针间接指向的内容。
方法
方法是绑定到一个具体类型的特殊函数,Go语言中的方法是依托于类型的,必须在编译时静态绑定。
接口
- 接口定义了方法的集合,这些方法依托于运行时的接口对象,因此接口对应的方法是在运行时动态绑定的。
- Go语言的接口类型是延迟绑定,可以实现类似虚函数的多态功能。
- Go语言中,对于基础类型(非接口类型)不支持隐式的转换,我们无法将一 个 int 类型的值直接赋值给 int64 类型的变量,也无法将 int 类型的值赋值给 底层是 int 类型的新定义命名类型的变量。Go语言对基础类型的类型一致性要求 可谓是非常的严格,但是Go语言对于接口类型的转换则非常的灵活。对象和接口之间的转换、接口和接口之间的转换都可能是隐式的转换。