Golang是一門很特殊的語言,雖然它出生比較晚,但是在很多地方卻和現在的程式設計語言有所不同。現在的程式設計語言要麼是函數式的、要麼是面向對象的,而Go語言卻有指針、結構體這些概念,并解決了C語言的一些坑。從這個角度上說,Golang可以看做C語言的填坑加強版。
結構體
定義結構體
定義結構體和C語言一樣,使用
struct
關鍵字。在結構體内部定義它們的成員變量和類型。如果成員變量的類型相同還可以把它們寫到同一行。
type Person struct {
age int
name string
}
初始化
初始化結構體需要使用一個特殊一點的文法,這就是結構體字面量。在結構體字面量中,可以按照順序初始化結構體、也也可以按照關鍵字初始化結構體。如果按照關鍵字初始化結構體,可以隻指定部分值,未指定的值将會使用預設值來初始化。
p1 := Person{24, "易天"}
p2 := Person{age: 24, name: "易天"}
p3 := Person{age: 24}
p4 := Person{name: "張三"}
fmt.Println(p1, p2, p3, p4)
通路結構體
最後要說的就是通路結構體了。結構體的成員都是公有的,是以可以直接用點号
.
通路。
p1.age = 26
p1.name = "王五"
fmt.Println(p1)
指針
Go的指針
如果學習過C語言的話,對指針的概念應該會比較熟悉。在Go語言中,直接砍掉了最複雜的指針運算的部分,隻留下了擷取指針(
&
運算符)和擷取對象(
*
運算符)的運算。
a, b := 3, 5
pa, pb := &a, &b
fmt.Println(*pa, *pb)
隐式解引用
對于一些複雜類型的指針, 如果要通路成員變量的話,需要寫成類似
(*p).field
的形式,Go提供了隐式解引用特性,我們隻需要
p.field
即可通路相應的成員。
p1 := &Person{name: "易天", age: 24}
fmt.Println((*p1).name)
fmt.Println(p1.name)