這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
type Person struct { Name string Address Address}type Address struct { Number string Street string City string State string Zip string}func (p *Person) Talk() { fmt.Println("Hi, my name is", p.Name)}func (p *Address) Location() { //fmt.Println("I'm at", p.Address.Number, p.Address.Street, p.Address.City, p.Address.State, p.Address.Zip) fmt.Println("I'm at", p.Number, p.Street, p.City, p.State, p.Zip)}func main() { p := Person{ Name: "Steve", Address: Address{ Number: "13", Street: "Main", City: "Gotham", State: "NY", Zip: "01313", }, } p.Talk() // p.Location() wrong p.Address.Location()}
上面是 一個“use-a”程式碼片段,不過注意“Address仍然是一個不同的對象,只不過存在於Person中”。
type Person struct { Name string Address}type Address struct { Number string Street string City string State string Zip string}func (p *Person) Talk() { fmt.Println("Hi, my name is", p.Name)}func (p *Address) Location() { //fmt.Println("I'm at", p.Address.Number, p.Address.Street, p.Address.City, p.Address.State, p.Address.Zip) fmt.Println("I'm at", p.Number, p.Street, p.City, p.State, p.Zip)}func main() { p := Person{ Name: "Steve", Address: Address{ Number: "13", Street: "Main", City: "Gotham", State: "NY", Zip: "01313", }, } p.Talk() p.Location() p.Address.Location()}上面是 一個“is-a”程式碼片段,不過注意“通過引入匿名域(Person)實現了is-a關係。Person是Citizen的一個匿名域(anonymous field),匿名域只給出了物件類型,而不給出類型的名字。通過匿名域,Citizen可以訪問Person中的所有屬性(域)和方法。”。
部分代碼和文字轉自《go是物件導向語言嗎?》。