2 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
下面是不同的例子:
type Animal struct {
Legs int
Kingdom string
Carnivore bool
}
通過引用初始化
返回指向結(jié)構(gòu)的指針
var tiger = &Animal{4, "mammalia", true}
fmt.Println(tiger.Kingdom) // print "mammalia"
func changeKingdom(a *Animal) {
a.Kingdom = "alien" // modify original struct
}
changeKingdom(tiger)
fmt.Println(tiger.Kingdom) // print "alien"
構(gòu)造函數(shù)New初始化
返回一個(gè)帶有零值的指針
var xAnimal = New(Animal)
fmt.Println(xAnimal.Kingdom) // print ""
fmt.Println(xAnimal.Legs) // print 0
fmt.Println(xAnimal.carnivore) // print false
changeKingdom(xAnimal)
fmt.Println(xAnimal.Kingdom) // print "alien"
按值初始化(復(fù)制)
返回原始結(jié)構(gòu)的單獨(dú)副本
var giraffe = Animal{4, "mammalia", false}
fmt.Println(giraffe.Kingdom) // print "mammalia"
func changeKingdom(a Animal) {
a.Kingdom = "extraterrestrial"
}
changeKingdom(giraffe)
fmt.Println(giraffe) // print "mammalia"
在使用結(jié)構(gòu)體而不是副本時(shí),您會(huì)更頻繁地處理指針。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
分配
new 和 &T{size:1} 返回 *T
T{size:1} 返回 T
內(nèi)置函數(shù) new 接受類型 T,在運(yùn)行時(shí)為該類型的變量分配存儲(chǔ)空間,并返回指向它的類型 *T 的值。變量按照初始值部分中的描述進(jìn)行初始化。
2.
任何其他命名類型 T 的方法集由所有接收者類型為 T 的方法組成。 對(duì)應(yīng)指針類型 *T 的方法集是所有接收者為 *T 或 T 的方法的集合(也就是說,它還包含方法集的)。
變量 pt * T
無功
func (r *T) area() int
您可以使用 pt.area() 或 t.area()
func (r T) area() int
你可以用t.area(),不能用pt.area()
通常我們使用 func(r *T) area() int
- 2 回答
- 0 關(guān)注
- 192 瀏覽
添加回答
舉報(bào)