2017-06-26 5 views
1

私は、引数として受け取る関数が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つだけを許可する関数を定義する方法はありますか?

答えて

0

したがって、3つの定義済み定数のうちの1つのみを許可する関数を定義する方法はありますか?

いいえありません。

まあ、あなたは醜いハッキングを、例えば、機能やインターフェイスの種類は、それは努力する価値はありません。

関連する問題