Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅允许Go中常量组的值_Go_Types - Fatal编程技术网

仅允许Go中常量组的值

仅允许Go中常量组的值,go,types,Go,Types,假设我有一个函数,它把一个int作为参数。我希望此函数只接受值0、1或2。如果我不必手动检查并返回错误,或者处理函数中的其他值,而是在编译时检查它以避免不必要的错误,那就太好了 // should only accept 0, 1 or 2 func foo(bar int) { fmt.Println(bar) } 现在为了做到这一点,我定义了自己的类型和3个常量值: type MyType int const ( Zero MyType = iota One

假设我有一个函数,它把一个
int
作为参数。我希望此函数只接受值0、1或2。如果我不必手动检查并返回
错误
,或者处理函数中的其他值,而是在编译时检查它以避免不必要的错误,那就太好了

// should only accept 0, 1 or 2
func foo(bar int) {
    fmt.Println(bar)
}
现在为了做到这一点,我定义了自己的类型和3个常量值:

type MyType int

const (
    Zero MyType = iota
    One
    Two
)
现在我可以修改我的函数以接受MyType而不是int:

func foo(bar MyType) {
    fmt.Println(bar)
}
我可以用三个常数中的任意一个来调用它:

foo(Zero) // would print 0
foo(One)  // would print 1
foo(Two)  // would print 2
而且,它不能用
int
而不是
MyType

i := 5
foo(i) // errors
它在编译时返回以下错误:
不能在foo的参数中使用i(type int)作为类型MyType。这正是我想要的。但是仍然可以调用该函数,如下所示:

foo(5) // works and prints 5
因为它从参数(实际上是int的MyType)推断类型,所以在传递非类型化参数时,它会自动将其转换为MyType

那么,有没有办法定义一个只允许3个已定义常量中的一个的函数

那么,有没有办法定义一个只允许3个已定义常量中的一个的函数

不,没有

嗯,你可以用函数或接口类型来做一些难看的黑客攻击,但这不值得付出努力

那么,有没有办法定义一个只允许3个已定义常量中的一个的函数

不,没有

嗯,你可以用函数或接口类型来做一些难看的黑客攻击,但这不值得付出努力