Go:接口方法调用

我有两个关于以下代码中的 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)似乎正确打印“黑色”。


阿晨1998
浏览 163回答 2
2回答

哆啦的时光机

为了让 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go