Struct是一個可以給程式設計師自定義型態的功能。
其實Struct就是有點類似OOP(物件導向)的概念。比如說我今天想要建立一個型態"人",那人有姓名和身高,這時候就可以使用Struct
person {
name
height
}
type mytype int
這樣一來宣告mytype變數時,實際上就是宣告int
以上面person的概念來舉例
type person struct {
name string
height int
}
同樣person當作範例
p := person{"Tony", 169}
{}內的順序依定義struct的順序
或是可以指定項目初始化
p := person{name: "Tony", height: 169}
如果想要存取struct裡面的內容,只要在後面加"."就好了
比如說我想存取person的name
person.name
比如說我的人比較多了,想要建立群組,裡面有群組名稱及人
group {
name
person
}
這時候就算是struct裡面又包了struct
首先是person的部分一樣
type person struct {
name string
height int
}
再來是group,裡面包含struct person
type group struct {
name string
person
}
g := group{"LINE", person{name: "Emily", height: 158}
那我們要如何存取struct裡面的struct呢?基本上就是一直.就對了
g.person.name
如果想存取height在group裡面是沒有定義的變數,可以偷懶一點像是
g.height
效果會等同於
g.person.height
那像是group和person都有name呢?那這時候就不能用這種偷懶的寫法了
假設要寫一個method給person用,為Greeting()
func (p person) Greeting() {
fmt.Println("Hi~")
}
p.Greeting()
那如果也想要幫group也做一個Greeting()怎麼辦呢?這時候就是override
func (p person) Greeting() {
fmt.Println("Hi~")
}
func (g group) Greeting() {
fmt.Println("We are a group")
}
這時候使用group的Greeting()就會不一樣了
g.Greeting()