一、基本概念
golang中struct是一種複合數據結構,它可以包含零個或多個任意類型的字段。如果我們在定義struct的同時初始化它,我們可以使用字段名稱來顯式初始化每個字段。
package main import "fmt" type person struct { name string age int } func main() { p1 := person{"Alice", 20} fmt.Println(p1) }
以上代碼定義了一個person結構體,並使用字段名稱初始化了它的兩個字段name和age。然後我們創建了一個p1的變量,並將這個person結構體實例化賦值給它。最後使用fmt.Println來打印這個person實例。
二、匿名結構體初始化
匿名結構體沒有類型名稱,我們可以在創建struct變量時直接初始化它。這在一些臨時場景下非常有用,比如我們需要把一些數據打包成一個結構體傳遞給函數參數。
package main import "fmt" func main() { p1 := struct { name string age int }{ name: "Alice", age: 20, } fmt.Println(p1) }
上面的例子中,我們創建了一個匿名結構體,初始化name和age字段,並將實例化賦值給p1變量。
三、指針struct初始化
如果我們初始化一個指向struct的指針變量,可以使用&符號進行操作。結構體指針變量在指向結構體實例前必須被初始化。結構體指針變量是使用* 語法定義的。
package main import "fmt" type person struct { name string age int } func main() { p1 := &person{ name: "Alice", age: 20, } fmt.Println(p1) }
這個例子中,我們定義了一個person結構體,通過&和結構體字面量初始化一個person指針變量p1,並使用name和age字段進行初始化。
四、繼承初始化
在golang中,可以通過嵌入其他結構體來實現繼承,使用起來非常方便。當我們使用嵌入式結構來定義一個新的struct時,被嵌入的結構體的字段會成為新的結構體的一部分,訪問時我們可以通過嵌套結構體字段的名稱來訪問。
package main import "fmt" type person struct { name string age int } type employee struct { person id int } func main() { e1 := employee{ person: person{"Alice", 20}, id: 1, } fmt.Println(e1) }
在上面的例子中,我們定義了一個person結構體和employee結構體,在employee結構體中嵌入了person結構體。我們使用person結構體實例初始化employee結構體實例,同時初始化了id字段。最後使用fmt.Println打印employee實例時,它包含嵌套的person實例。
五、結構體零值初始化
在golang中,當我們定義一個struct時,默認情況下它的所有字段都被初始化為零值。對於數值類型,默認值為0,布爾類型默認值為false,字符串類型默認值為””,指針類型默認值為nil。
package main import "fmt" type person struct { name string age int } func main() { var p1 person fmt.Println(p1) }
這個例子中,我們定義了一個person結構體,並使用var關鍵字初始化一個空的person實例p1。由於person結構體中的字段都是空的,所以運行這個程序時我們會看到{name:””, age:0}被打印出來。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304624.html