Golang學(xué)習(xí)筆記(六):struct
struct
struct,一組字段的集合,類(lèi)似其他語(yǔ)言的class
放棄了大量包括繼承在內(nèi)的面向?qū)ο筇匦?,只保留了組合(composition)這個(gè)最基礎(chǔ)的特性
1.聲明及初始化
type person struct {
name string
age int
}
//初始化
func main() {
var P person
P.name = "tom"
P.age = 25
fmt.Println(P.name)
P1 := person{"Tom1", 25}
fmt.Println(P1.name)
P2 := person{age: 24, name: "Tom"}
fmt.Println(P2.name)
}
2.struct的匿名字段(繼承)
type Human struct {
name string
age int
weight int
}
tyep Student struct {
Human //匿名字段,默認(rèn)Student包含了Human的所有字段
speciality string
}
mark := Student(Human{"mark", 25, 120}, "Computer Science")
mark.name
mark.age
能夠?qū)崿F(xiàn)字段繼承,當(dāng)字段名重復(fù)的時(shí)候,優(yōu)先取外層的,可以通過(guò)指定struct名還決定取哪個(gè)
mark.Human = Human{"a", 55, 220}
mark.Human.age -= 1
struct不僅可以使用struct作為匿名字段,自定義類(lèi)型、內(nèi)置類(lèi)型都可以作為匿名字段,而且可以在相應(yīng)字段上做函數(shù)操作
3.method
type Rect struct {
x, y float64
width, height float64
}
//method
Reciver 默認(rèn)以值傳遞,而非引用傳遞,還可以是指針
指針作為Receiver會(huì)對(duì)實(shí)例對(duì)象的內(nèi)容發(fā)生操作,而普通類(lèi)型作為Receiver僅僅是以副本作為操作對(duì)象,而不對(duì)原實(shí)例對(duì)象發(fā)生操作
func (r ReciverType) funcName(params) (results) {
}
如果一個(gè)method的receiver是*T,調(diào)用時(shí),可以傳遞一個(gè)T類(lèi)型的實(shí)例變量V,而不必用&V去調(diào)用這個(gè)method
func (r *Rect) Area() float64 {
return r.width * r.height
}
func (b *Box) SetColor(c Color) {
b.color = c
}
4.method繼承和重寫(xiě)
采用組合的方式實(shí)現(xiàn)繼承
type Human struct {
name string
}
type Student struct {
Human
School string
}
func (h *Human) SayHi() {
fmt.Println(h.name)
}
//則Student和Employee的實(shí)例可以調(diào)用
func main() {
h := Human{name: "human"}
fmt.Print(h.name)
h.SayHi()
s := Student{Human{"student"}}
s.SayHi()
}
還可以進(jìn)行方法重寫(xiě)
funct (e *Student) SayHi() {
e.Human.SayHi()
fmt.Println(e.School)
}
相關(guān)文章
Gin+Gorm實(shí)現(xiàn)CRUD的實(shí)戰(zhàn)
本文主要介紹了Gin+Gorm實(shí)現(xiàn)CRUD的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
GO語(yǔ)言gin框架實(shí)現(xiàn)管理員認(rèn)證登陸接口
這篇文章主要介紹了GO語(yǔ)言gin框架實(shí)現(xiàn)管理員認(rèn)證登陸接口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Golang中HTTP服務(wù)的分析與設(shè)計(jì)詳解
這篇文章主要介紹了Golang中HTTP服務(wù)的分析與設(shè)計(jì),HTTP服務(wù)是實(shí)現(xiàn)Web應(yīng)用程序的重要組成部分,為了實(shí)現(xiàn)高效可擴(kuò)展的Web應(yīng)用程序,需要對(duì)HTTP服務(wù)進(jìn)行分析與設(shè)計(jì),需要的朋友可以參考下2023-05-05
golang實(shí)現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫(kù)功能
這篇文章主要為大家詳細(xì)介紹了golang實(shí)現(xiàn)文件上傳并轉(zhuǎn)存數(shù)據(jù)庫(kù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
利用GoLang?Fiber進(jìn)行高性能Web開(kāi)發(fā)實(shí)例詳解
這篇文章主要為大家介紹了利用GoLang?Fiber進(jìn)行高性能Web開(kāi)發(fā)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Golang?手寫(xiě)一個(gè)簡(jiǎn)單的并發(fā)任務(wù)?manager
這篇文章主要介紹了Golang?手寫(xiě)一個(gè)簡(jiǎn)單的并發(fā)任務(wù)?manager,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

