私は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ここにのみ表示されます)。メッセージの種類ごとに個別のコンストラクターを作成してエクスポートする必要がないようにしたいので、型自体をエクスポートし続けることができれば素晴らしいと思います。