私は、引数として受け取る関数がint
であるとします。私はこの関数が値0,1または2だけを受け入れるようにしたい。そして、これを手動でチェックしてerror
を返す必要がないか、関数内から他の値を処理する必要はなく、コンパイル時にチェックする望ましくないエラーを避けることができます。goのconstグループの値のみを許可する
// should only accept 0, 1 or 2
func foo(bar int) {
fmt.Println(bar)
}
は今、これを行うために、私は自分のタイプを定義し、それのための3つの定数値:
type MyType int
const (
Zero MyType = iota
One
Two
)
今、私が代わりにint型のがMyTypeを受け入れるように、私の機能を変更することができます。
func foo(bar MyType) {
fmt.Println(bar)
}
そして、私は3つの定数のいずれかでそれを呼び出すことができます。
foo(Zero) // would print 0
foo(One) // would print 1
foo(Two) // would print 2
そしてまた、それははそれはコンパイル時に以下のエラーを返す代わりにMyType
i := 5
foo(i) // errors
のint
を呼び出すことはできません。cannot use i (type int) as type MyType in argument to foo
。それは実際に私が欲しいものです。しかし!それは(実際にはあるがMyTypeであるint型)の引数から型を推論するので、型指定されていない引数を渡すときに、それががMyTypeに自動的に変換するので
foo(5) // works and prints 5
:機能はまだのように呼び出すことができます。
したがって、3つの定義された定数のうちの1つだけを許可する関数を定義する方法はありますか?