Golang是一門很特殊的語言,雖然它出生比較晚,但是在很多地方卻和現(xiàn)在的編程語言有所不同?,F(xiàn)在的編程語言要么是函數(shù)式的、要么是面向?qū)ο蟮?,而Go語言卻有指針、結(jié)構(gòu)體這些概念,并解決了C語言的一些坑。從這個(gè)角度上說,Golang可以看做C語言的填坑加強(qiáng)版。
結(jié)構(gòu)體
定義結(jié)構(gòu)體
定義結(jié)構(gòu)體和C語言一樣,使用struct關(guān)鍵字。在結(jié)構(gòu)體內(nèi)部定義它們的成員變量和類型。如果成員變量的類型相同還可以把它們寫到同一行。
type Person struct {
age int
name string
}
初始化
初始化結(jié)構(gòu)體需要使用一個(gè)特殊一點(diǎn)的語法,這就是結(jié)構(gòu)體字面量。在結(jié)構(gòu)體字面量中,可以按照順序初始化結(jié)構(gòu)體、也也可以按照關(guān)鍵字初始化結(jié)構(gòu)體。如果按照關(guān)鍵字初始化結(jié)構(gòu)體,可以只指定部分值,未指定的值將會使用默認(rèn)值來初始化。
p1 := Person{24, "易天"}
p2 := Person{age: 24, name: "易天"}
p3 := Person{age: 24}
p4 := Person{name: "張三"}
fmt.Println(p1, p2, p3, p4)
訪問結(jié)構(gòu)體
最后要說的就是訪問結(jié)構(gòu)體了。結(jié)構(gòu)體的成員都是公有的,所以可以直接用點(diǎn)號.訪問。
p1.age = 26
p1.name = "王五"
fmt.Println(p1)
指針
Go的指針
如果學(xué)習(xí)過C語言的話,對指針的概念應(yīng)該會比較熟悉。在Go語言中,直接砍掉了最復(fù)雜的指針運(yùn)算的部分,只留下了獲取指針(&運(yùn)算符)和獲取對象(*運(yùn)算符)的運(yùn)算。
a, b := 3, 5
pa, pb := &a, &b
fmt.Println(*pa, *pb)
隱式解引用
對于一些復(fù)雜類型的指針, 如果要訪問成員變量的話,需要寫成類似(*p).field的形式,Go提供了隱式解引用特性,我們只需要p.field即可訪問相應(yīng)的成員。
p1 := &Person{name: "易天", age: 24}
fmt.Println((*p1).name)
fmt.Println(p1.name)