go 結構體和方法

2022-06-19 12:03:11 字數 1957 閱讀 9719

結構體型別的字面量由關鍵字type、型別名稱、關鍵字struct,以及由花括號包裹的若干字段宣告組成。

type person

struct

person  

鍵值對的順序與其型別中的字段宣告完全相同的話,我們還可以統一省略掉所有欄位的名稱

person

結構體型別的值字面量時可以只對它的部分字段賦值,甚至不對它的任何字段賦值。

這時,未被顯式賦值的字段的值則為其型別的零值。

上述情況下,欄位的名稱是不能被省略的。

匿名結構體

編寫乙個結構體值的字面量時不需要先擬好其型別。這樣的結構體字面量被稱為匿名結構體。

與匿名函式類似,我們在編寫匿名結構體的時候需要先寫明其型別特徵(包含若干字段宣告),再寫出它的值初始化部分。

p := struct

匿名結構體最大的用處就是在內部臨時建立乙個結構以封裝資料,而不必正式為其宣告相關規則。

而在涉及到對外的場景中,我強烈建議使用正式的結構體型別。

結構體型別可以擁有若干方法(注意,匿名結構體是不可能擁有方法的)

所謂方法,其實就是一種特殊的函式。它可以依附於某個自定義型別。

方法的特殊在於它的宣告包含了乙個接收者宣告。

這裡的接收者指代它所依附的那個型別。名為grow的方法的宣告:

func (person *person) grow()

p := person

p.grow()

最後,結構體型別屬於值型別。

它的零值並不是nil,而是其中欄位的值均為相應型別的零值的值。

結構體型別person的零值若用字面量來表示的話則為person{}。

package main

import (

"fmt")

type persion

struct

type student

struct

func main() , 1, 100, "

201 room

", "xx"

} fmt.println(xiaoming)

//可直接使用匿名物件的型別

fmt.println(xiaoming.int

)

//自動推導

xiaofang := student, 1, 100, "

401 room

", "xx"

} fmt.println(xiaofang)

//指定成員初始化

s3 := student}

fmt.println(s3)

s4 := student

fmt.println(s4)

}

type student struct

func main() }

fmt.println(xiaoming.name)

//方式2

varxiaofang student

xiaofang.persion = new

(persion)

xiaofang.persion.name = "

xiaofang

"fmt.println(xiaofang.persion.name)

}

//

帶有接收者的方法叫成員函式

func (p persion) printname()

//指標接收者

func (p *persion) setname(str string

) func main()

p.printname()

(&p).setname("

xiaof")

p.printname()

}

Go 結構體,結構體指標和方法

結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...

go 修改結構體方法 go結構體方法

golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...

go 結構體指標方法與結構體方法的區別

package main import fmt type person struct func v person modifyname name string func main xiaoming.modifyname 小李 fmt.println xiaoming.name 輸出結果如下 c us...