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

