寶慕林4294392
2022-05-18 14:34:47
嘗試為 GOARCH 386 進(jìn)行交叉編譯:package mainimport ( "fmt" "math")func main() { i := math.MaxInt64 fmt.Println(i)}建造:env GOARCH=386 go run main.go輸出:# command-line-arguments./sample.go:9:4: constant 9223372036854775807 overflows int為什么 vari被推斷為 int32 而不是 int64?這是一個(gè)眾所周知的錯(cuò)誤或 go lang 規(guī)范嗎?
1 回答

小唯快跑啊
TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
math.MaxInt64定義如下:
const (
MaxInt64 = 1<<63 - 1
)
來自https://blog.golang.org/constants:
Go 中無類型常量的概念意味著所有數(shù)字常量,無論是整數(shù)、浮點(diǎn)、復(fù)數(shù),甚至是字符值,都存在于一種統(tǒng)一的空間中。當(dāng)我們將它們帶入變量、賦值和操作的計(jì)算世界時(shí),實(shí)際類型很重要。
通過強(qiáng)制編譯為 32 位架構(gòu),您將int數(shù)字的 go 默認(rèn)類型強(qiáng)制為顯式int32- 而在大多數(shù)現(xiàn)代 CPUint上,隱式為int64.
順便說一句,如果您明確使用類型int64(而不是推斷的int類型):
var i int64
i = math.MaxInt64
雖然這可能會為 32 位架構(gòu)“編譯” ,但它不會運(yùn)行:
GOARCH=386 go build -o too_big && ./too_big
./too_big: Bad CPU type in executable
- 1 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報(bào)
0/150
提交
取消