天天看點

Golang結構體和指針

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)
           

繼續閱讀