1、Go 中有一个概念:
1)Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数。
2)除了接口类型(给接口增加方法会报错:invalid receiver type…),任何类型都可以有方法,甚至可以是函数类型,结构体,切片,map等,也可以是 int、bool、string 或数组的别名类型。
3)最后接收者不能是一个指针类型,但是它可以是任何其他允许类型的指针。
4)别名类型不能有它原始类型上已经定义过的方法。
2、方法的定义格式:
func (recv receiver_type) methodName (parameter_list) (return_value_list) { ... }
recv各种方式:
1)receiver 的实例
2)receiver 的实例的指针,Go 会自动解引用。(推荐)
3)“_”下划线,在方法体内不需要使用recv的值。
recv的作用: 就像是面向对象语言中的this或self。
ep:
type Point struct {
x, y float64
}
func (p *Point) Abs( ) float64 {
return math.Sqrt( p.x * p.x + p.y * p.y ) //这里的p和JavaScript中的this作用差不多
}
3、指针方法和值方法都可以在指针或非指针上被调用。
4、通过以下例子可以理解Go语言的方法和知道如果导出\读取私有的属性:
packageperson
type Person struct {
firstName string
lastName string
}
func (p *Person) FirstName( ) string {
return p.firstName
}
func (p *Person) SetFirstName( newNamestring ) {
p.firstName = newName
}
5、内嵌类型的方法和继承
将父类型放在子类型中来实现亚型。