我有兩個(gè)關(guān)于以下代碼中的 Go 接口的問(wèn)題。type Color interface { getColor() string setColor(string)}type Car struct { color string}func (c Car) getColor() string { return c.color}func (c Car) setColor(s string) { c.color = s}func main() { car := Car{"white"} col := Color(car) car = col.(Car) // L(1) car.setColor("yellow") fmt.Println(col) // L(2) fmt.Println(car) car.color = "black" fmt.Println(col) // L(3) fmt.Println(car)}Q1:可以寫(xiě)嗎 L(1) as "car, _ := col.(Car)"?Q2:L(2)打印“白色”而不是“黃色”。為什么?L(3)似乎正確打印“黑色”。
2 回答
哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
為了讓 setColor 改變 Car 對(duì)象,您希望您必須傳遞一個(gè)指針,您的代碼按值傳遞 Car 并更改該值的顏色,然后在方法返回時(shí)立即丟棄 Car 值的副本
這是您更改的示例,以便通過(guò)指向 Car 的指針滿(mǎn)足接口
func (c *Car) getColor() string {
return c.color
}
func (c *Car) setColor(s string) {
c.color = s
}
上面的鏈接輸出:
&{yellow}
&{yellow}
&{black}
&{black}
- 2 回答
- 0 關(guān)注
- 208 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
