为什么我的 setter 不能处理匿名结构字段?

我只是在学习 Go,这里有一些我无法理解的行为:


package main


import "fmt"


type Message interface {

    SetSender(sender string)

}


type message struct {

    sender string

}


type Join struct {

    message

    Channel string

}


func (m message) SetSender(sender string) {

    m.sender = sender

}


func main() {

    var msg Message

    msg = Join{}

    msg.SetSender("Jim")

    fmt.Printf("%s", msg)

}

这会打印{{} },因此SetSender调用似乎没有生效。我怀疑它以某种方式对 的副本进行操作message,但我无法弄清楚这样的副本来自哪里。我尝试更改SetSender以进行操作,*message但无法编译。


游乐场:http : //play.golang.org/p/yNdnM1bfSG


也欢迎提供替代设计模式的建议。我有几种类型的消息(仅Join在此处显示),但它们都有一些共同的字段(仅sender在此处显示)。我想避免为每种消息类型编写和导出单独的构造函数,所以如果我能继续导出类型本身,那就太好了。


暮色呼如
浏览 159回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go