我遇到過這樣一種情況,我在常量中有一些整數(shù)值并將其與math.Pi常量相乘,如下所示:func main() { const a = 5 fmt.Printf("%v", a*math.Pi)}在執(zhí)行時,它給出以下結(jié)果:15.707963267948966但是,當(dāng)我將常量更改為變量 ( variable a)時,如下所示:func main() { a := 5 fmt.Printf("%v", a*math.Pi)}編譯時出現(xiàn)以下錯誤:constant 3.14159 truncated to integer據(jù)我所知,隱式數(shù)字類型轉(zhuǎn)換在表達式的所有操作數(shù)都是常量時有效,但在其中任何一個變量時無效。但是為什么會這樣呢?
1 回答

慕標琳琳
TA貢獻1830條經(jīng)驗 獲得超9個贊
它的發(fā)生是因為 Go 的無類型常量。在這兩種情況下,您都沒有明確指定類型。
在第一種情況下,您正在定義一個無類型常量(您也可以使用 定義一個有類型常量const a float64 = 5
)。對于無類型常量,只有在需要類型的上下文中使用時才會推斷出類型——即當(dāng)您將它與 math.Pi 相乘時,編譯器將“猜測”您想要在那里有一個浮點數(shù),以及所有內(nèi)容工作正常。
在第二種情況下,一個變量當(dāng)然必須有一個類型,所以類型推斷發(fā)生在聲明變量的時候,因為你使用了“5”,編譯器將“推斷”出 int,并且將 int 和 float 相乘是在圍棋中不可能。您可以使用 ega:=5.0
或var a float64 = 5
將 a 聲明為 float64,那么此代碼也可以正常工作。
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消