为了账号安全,请及时绑定邮箱和手机立即绑定

Go:接口方法调用

Go:接口方法调用

Go
阿晨1998 2021-06-17 14:11:46
我有两个关于以下代码中的 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}


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信