以下のようなstructがあったとする。
type Cmd1 struct {
id int
}
type Cmd2 struct {
msg string
}
あるchannelにCmd1とCmd2の両方を入れたいとする。その場合
var ch chan interface{}
とすればCmd1もCmd2も入れることができるchannelになるが、このchannelにはintもfloat32も他のstructも何でも入ってしまう。
コンパイル時にCmd1とCmd2以外を入れていないことをチェックするには、以下のようにすれば良い。
type Cmd interface {
isCmd() bool
}
type CmdBase struct {
}
func (c CmdBase) isCmd() bool {
return true
}
type Cmd1 struct {
CmdBase
id int
}
type Cmd2 struct {
CmdBase
msg string
}
これで、
var ch chan Cmd
とchannelを作れば、Cmd1とCmd2以外を間違ってchannelに入れてしまう可能性をかなり減らせる。
0 件のコメント:
コメントを投稿