在Go中,我们可以说:
type Month int
基于int创建新类型。
是否还可以说该类型允许的值范围是1-12,并保证不能分配任何值<1或> 12?
答案 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
}