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