10 結(jié)構(gòu)體struct

Go 中的struct與C中的struct非常相似,并且Go沒有class
使用 type <Name> struct{} 定義結(jié)構(gòu),名稱遵循可見性規(guī)則

type person struct{
Name string
Age int
}

func main(){
a := person{}
a.Name = "joe"
a.Age = 19
fmt.Println(a)

b := pserson{
Name : "jole",
Age : 12,
}
fmt.Println(b)
}

支持指向自身的指針類型成員
支持匿名結(jié)構(gòu),可用作成員或定義成員變量
匿名結(jié)構(gòu)也可以用于map的值
可以使用字面值對結(jié)構(gòu)進(jìn)行初始化
允許直接通過指針來讀寫結(jié)構(gòu)成員
相同類型的成員可進(jìn)行直接拷貝賦值
支持 == 與 !=比較運(yùn)算符,但不支持 > 或 <
支持匿名字段,本質(zhì)上是定義了以某個類型名為名稱的字段
嵌入結(jié)構(gòu)作為匿名字段看起來像繼承,但不是繼承
可以使用匿名字段指針

func main(){
a := pserson{
Name : "jole",
Age : 12,
}
fmt.Println(a)

A(a) //這里傳入不是地址 里面輸出的age變13
fmt.Println(a) //這里輸出的age還是12

A(&a) //這里傳入是地址 里面輸出的age變13
fmt.Println(a) //這里輸出的age也是13

//為了更加方便那就可以
b := &pserson{
Name : "jole",
Age : 12,
}

fmt.Println(b)

A(b) //這里就可以直接傳入地址
fmt.Println(b)

//匿名結(jié)構(gòu)
c := &struct {
Name string
Age int
}{
Name : "joe"
Age : 19
}

}
func A(per *person){
per.Age =13
fmt.Println("A",per)
}

func B(per *preson){
}
---end

//嵌套匿名結(jié)構(gòu)
type person struct {
Name string
Age int
Contact struct {
Phone string
City string
CN,Sex string//多個定義類型
}
}

func main(){
a := person{Name: "joe", Age: 19}
a.Contact.Phone = "12456" //只能通過這樣的方式進(jìn)行結(jié)構(gòu)體中的結(jié)構(gòu)體
a.Contact.City= "wenzhou"
fmt.Println(a)
}
--end

type person struct{//這樣屬于匿名結(jié)構(gòu)
string
int
}

func main(){
a := person{ "joe", 18}
fmt.Println(a)
}
---end

//嵌入結(jié)構(gòu) 類似預(yù)面向?qū)ο蟮睦^承
type human struct {
Sex int
}

type teacher struct {
human
Name string
Age int
}

type student struct {
human
Name string
Age int
}

func main() {
a := teacher{Name: "jjj", Age: 19, human: human{Sex: 0}}
b := teacher{Name: "jjj", Age: 20, human: human{Sex: 1}}
a.Age = "j23"
a.human.Sex = 100
a.Sex = 200 //嵌入式的特色
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容