您也可以使用指向struct的指針。Golang中的struct(結(jié)構(gòu)體)是用戶定義的類型,它允許將可能不同類型的項(xiàng)目分組/組合為單個(gè)類型。要使用指向結(jié)構(gòu)的指針,可以使用&運(yùn)算符,即地址運(yùn)算符。Golang允許程序員使用指針訪問結(jié)構(gòu)的字段,而無需顯式地解引用。
示例1:在這里,我們創(chuàng)建了一個(gè)名為Employee的結(jié)構(gòu),它有兩個(gè)變量。在main函數(shù)中,創(chuàng)建結(jié)構(gòu)體的實(shí)例,即emp,然后,你可以將結(jié)構(gòu)體的地址傳遞給表示結(jié)構(gòu)體概念的指針。沒有必要顯式地使用解引用,因?yàn)樗鼤?huì)給出與下面程序相同的結(jié)果(兩次ABC)。
package main import "fmt" //定義結(jié)構(gòu)體 type Employee struct { //設(shè)置字段 name string empid int } func main() { //創(chuàng)建的實(shí)例 //員工結(jié)構(gòu)體類型 emp := Employee{"ABC", 19078} //在這里,它是指向結(jié)構(gòu)體的指針 pts := &emp fmt.Println(pts) //訪問結(jié)構(gòu)字段(員工的姓名) //使用指針,但是這里我們沒有使用顯式解引用 fmt.Println(pts.name) //通過顯式使用解引用 //表示結(jié)果與上面相同 fmt.Println((*pts).name) }
輸出:
&{ABC 19078} ABC ABC
示例2:您還可以使用指針,如下所示修改結(jié)構(gòu)成員或結(jié)構(gòu)字面量的值:
package main import "fmt" //定義結(jié)構(gòu)體 type Employee struct { name string empid int } func main() { //創(chuàng)建的實(shí)例 //員工結(jié)構(gòu)類型 emp := Employee{"ABC", 19078} //在這里,它是指向結(jié)構(gòu)體的指針 pts := &emp //顯示值 fmt.Println(pts) //更新name的值 pts.name = "XYZ" fmt.Println(pts) }
輸出:
&{ABC 19078} &{XYZ 19078}