带范围夹紧的typedef

时间:2018-10-25 19:14:47

标签: go

在Go中,我们可以说:

type Month int

基于int创建新类型。

是否还可以说该类型允许的值范围是1-12,并保证不能分配任何值<1或> 12?

2 个答案:

答案 0 :(得分:3)

否,无论您是否将其定义为自定义类型,都不能对int施加限制。您可以获得的最接近的代码类似于下面的代码,使用的是iota结构

type Month int

const (
    Jan Month = iota + 1
    Feb
    Mar
    Apr
    May
    Jun
    Jul
    Aug
    Sep
    Oct
    Nov
    Dec
)

func main() {
    fmt.Println(Jan, Feb, Mar)
}

这将打印1 2 3。它有很多用途,您可以在https://splice.com/blog/iota-elegant-constants-golang/

中查找更多信息。

这不能保证您不能将随机值分配给结果变量,但是只要在任何地方都使用定义的常量,就可以了。

答案 1 :(得分:2)

您可以使用未导出的变量存储值来限制对单个程序包的访问。例如,

package date

type Month struct {
    month int
}