我正在开发一个应该是64位或32位的项目。
由于第三方驱动程序,我被迫使用int而不是int64。
const (
_ = iota // ignore zero iota
KiB = 1 << (10 * iota)
MiB
GiB
TiB
)
func doSomething() (ok bool) {
if strconv.IntSize != 64 {
// exiting early from function because default int is not 64bit.
return false
}
ThirdPartyDriverBytes = 5 * GiB
return true
}
不幸的是编译器抱怨,我收到constant 5368709120 overflows int
错误。
如何有效解决此问题?有没有办法可以强制这个5 * GiB计算在运行时发生?
答案 0 :(得分:0)
只需将变量显式键入int64
,而不是依赖于平台的int
:
var ThirdPartyDriverBytes int64
const (
_ int64 = iota // ignore zero iota
KiB = 1 << (10 * iota)
MiB
GiB
TiB
)
这比尝试解决从常量表达式推断类型的编译器更清楚。
答案 1 :(得分:-1)
我找到了一个解决方法...... 5 * GiB
是一个常量表达式,因此由编译器计算。
通过分成多个语句,它不再发生。
defaultBytes := 5
ThirdPartyDriverBytes = defaultBytes * GiB