Golang學(xué)習(xí)筆記(六):struct
struct
struct,一組字段的集合,類似其他語言的class
放棄了大量包括繼承在內(nèi)的面向?qū)ο筇匦裕槐A袅私M合(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)先取外層的,可以通過指定struct名還決定取哪個(gè)
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會對實(shí)例對象的內(nèi)容發(fā)生操作,而普通類型作為Receiver僅僅是以副本作為操作對象,而不對原實(shí)例對象發(fā)生操作
func (r ReciverType) funcName(params) (results) {
}
如果一個(gè)method的receiver是*T,調(diào)用時(shí),可以傳遞一個(gè)T類型的實(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繼承和重寫
采用組合的方式實(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)行方法重寫
funct (e *Student) SayHi() {
e.Human.SayHi()
fmt.Println(e.School)
}
相關(guān)文章
Go 語言下基于Redis分布式鎖的實(shí)現(xiàn)方式
本篇文章將詳細(xì)介紹如何正確地實(shí)現(xiàn)Redis分布式鎖,下面通過一個(gè)項(xiàng)目基于 Redis 的分布式鎖能夠提供哪些分布鎖特性,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06Golang實(shí)現(xiàn)Mongo數(shù)據(jù)庫增刪改查操作
本文主要介紹了Golang實(shí)現(xiàn)Mongo數(shù)據(jù)庫增刪改查操作,我們使用了 MongoDB的官方Go驅(qū)動(dòng)程序,實(shí)現(xiàn)了插入、查詢、更新和刪除操作,感興趣的可以了解一下2024-01-01Golang使用singleflight解決并發(fā)重復(fù)請求
高并發(fā)的場景下,經(jīng)常會出現(xiàn)并發(fā)重復(fù)請求資源的情況,singleflight是golang內(nèi)置的一個(gè)包,這個(gè)包提供了對重復(fù)函數(shù)調(diào)用的抑制功能,所以下面我們就來看看如何使用它解決并發(fā)重復(fù)請求吧2023-08-08go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例
這篇文章主要介紹了golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12