Go 带范围夹紧的typedef
在围棋中,我们可以说:Go 带范围夹紧的typedef,go,Go,在围棋中,我们可以说: type Month int 创建基于int的新类型 是否也可以说此类型允许的值范围为1-12,并保证不能分配值12?否,无论您是否将int定义为自定义类型,都不能对其进行限制。您可以得到的最接近的代码类似于下面使用iota构造的代码 type Month int const ( Jan Month = iota + 1 Feb Mar Apr May Jun Jul Aug Sep Oc
type Month int
创建基于int的新类型
是否也可以说此类型允许的值范围为1-12,并保证不能分配值<1或>12?否,无论您是否将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
。它有很多用途,你可以在这里查阅更多信息
这并不保证您不能将随机值分配给结果变量,但只要您在任何地方都使用定义的常量,您就可以了。否,无论您是否将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
。它有很多用途,你可以在这里查阅更多信息
这并不能保证您不能将随机值分配给结果变量,但只要您在任何地方都使用定义的常量,就可以了。您可以通过使用未报告的变量存储值来限制对单个包的访问。比如说,
package date
type Month struct {
month int
}
通过使用未报告的变量存储值,可以限制对单个包的访问。比如说,
package date
type Month struct {
month int
}
不是在编译器级别,不是。在需要的地方,你必须自己编写逻辑。在Go中,你在语言级别所能做的一切都在规范中描述:不是在编译器级别,不需要。无论需要什么逻辑,你都必须自己编写。规范中描述了你在Go语言级别所能做的一切:这个答案是错误的。问题是“是否也可以说此类型允许的值范围为1-12,并保证不能分配任何小于1或大于12的值?”您的回答不能保证这一点。任何
int
值都是有效的:真正的答案是“不,你不能这样做,但这是你能得到的最接近你想要的”这个答案是错误的。问题是“是否也可以说此类型允许的值范围为1-12,并保证不能分配任何小于1或大于12的值?”您的回答不能保证这一点。任何int
值都是有效的:真正的答案是“不,你不能这样做,但这是你能得到的最接近你想要的”这将值限制为允许值和零。不可能阻止零值。这将值限制为允许值和零。不可能阻止零值。