我有两个关于以下代码中的 Go 接口的问题。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:可以写吗 L(1) as "car, _ := col.(Car)"?Q2:L(2)打印“白色”而不是“黄色”。为什么?L(3)似乎正确打印“黑色”。
2 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
为了让 setColor 改变 Car 对象,您希望您必须传递一个指针,您的代码按值传递 Car 并更改该值的颜色,然后在方法返回时立即丢弃 Car 值的副本
这是您更改的示例,以便通过指向 Car 的指针满足接口
func (c *Car) getColor() string {
return c.color
}
func (c *Car) setColor(s string) {
c.color = s
}
上面的链接输出:
&{yellow}
&{yellow}
&{black}
&{black}
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消