math.MaxInt64
это определено примерно так:
const (
MaxInt64 = 1<<63 - 1
)
С https://blog.golang.org/constants:
Понятие нетипизированного константы в Go означают, что все числовые константы, будь то целые числа, значения с плавающей запятой, комплексные или даже символьные значения, живут в неком объединенном пространстве. Когда мы приводим их в вычислительный мир переменных, присваиваний и операций, фактические типы имеют значение.
При переводе вашей компиляции в 32-битную архитектуру вы приводите go по умолчанию int
тип для чисел с явным int32
- тогда как на большинстве современных процессоров int
неявно является int64
.
Кстати, если вы явно используете тип int64
(вместо типа int
):
var i int64
i = math.MaxInt64
, в то время как это может "скомпилировать" для 32-битной архитектуры, оно будет не работать:
GOARCH=386 go build -o too_big && ./too_big
./too_big: Bad CPU type in executable