Golang中的方法是做用在特定類型的變量上,所以自定義類型,均可以有方法,而不單單是struct。golang
func (var *Struct_Name) FuncName( var0, var1... ) return type {}
package main import ( "fmt" ) type test struct { name string age int } func (v *test) getList() { fmt.Println("getList") } func main() { var s = new(test) s.getList() }
package main import ( "fmt" ) type test struct { name string age int } func (this *test) init(name string, age int) { this.name = name this.age = age } func (this *test) getName() string { return this.name } func (this *test) getAge() int { return this.age } func main() { var s = new(test) s.init("zhangsan", 20) fmt.Println(s.getName()) fmt.Println(s.getAge()) }
自行調用初始化方法來實現構造函數的做用函數
package main import "fmt" type integer int func (this integer) test() { fmt.Println("print integer") } type test struct { name string age int } func main() { var i = new(integer) i.test() }
package main type integer int func main() { var i integer i = 100 var n = 10 n = i }
package main import ( "fmt" ) type integer int func (this integer) get() { fmt.Println(this) } func (this integer) set(num integer) { this = num } func main() { var i integer i = 100 i.set(1999) fmt.Print(i) }
package main import ( "fmt" ) type integer int func (this integer) get() { fmt.Println(this) } func (this *integer) set(num integer) { *this = num } func main() { var i integer i = 100 (&i).set(1999) //= i.set(1999) fmt.Print(i) }
方法的訪問控制也是經過控制的this
若是一個struct嵌套了另外一個匿名結構體,那麼這個結構能夠直接訪問 匿名結構體的方法,從而實現了繼承。spa
結構體方法的繼承blog
package main import ( "fmt" ) type test struct { Name int Age int } func (this test) getName() int { return this.Name } type test1 struct { test } func main() { var t test1 t.Name = 123 var name = t.getName() fmt.Println(name) }
若是一個struct嵌套了另外一個匿名結構體,那麼這個結構能夠直接訪問 匿名結構體的方法,從而實現了繼承。繼承
若是一個struct嵌套了另外一個有名結構體,那麼這個模式就叫組合。get
package main import ( "fmt" ) type test struct { Name int Age int } func (this test) getName() int { return this.Name } type test1 struct { t test } func main() { var t test1 t.t.Name = 123 var name = t.t.getName() fmt.Println(name) }