GoLang在运行时强制计算,而不是编译时

时间:2017-11-07 10:50:16

标签: go architecture 32bit-64bit

我正在开发一个应该是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计算在运行时发生?

2 个答案:

答案 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