慕尼黑8549860
2021-05-05 22:38:42
我有type DocId intfunc foo(documents []String) { for i := range documents { id := DocId(i) ... }}如何擺脫顯式轉(zhuǎn)換行?DocIds的意思是類型索引單個文檔。我想要的更像是:func foo(documents []String) { for id := range documents { ... // id gets used as the DocId that it damn well *IS* }}當(dāng)我嘗試將范圍中的id用作DocId時,即使DocId是一個int,這也給我“無效的操作:...(int和DocId類型不匹配)”。
2 回答

守著星空守著你
TA貢獻1799條經(jīng)驗 獲得超8個贊
只有未類型化的常量可以自動轉(zhuǎn)換為正確的類型。
您可以找到一些示例,其中不需要為該類型的常量使用強制轉(zhuǎn)換,例如此線程。從規(guī)格:
如果一個操作數(shù)是未類型化的常量,而另一個操作數(shù)不是,則該常量將轉(zhuǎn)換為另一種操作數(shù)的類型
但是在這里,range將迭代值顯式分配給相應(yīng)的迭代變量(i int, T a[i]),使i和int。(來自規(guī)范“ For statement ”)
對于其他所有情況,都需要顯式強制轉(zhuǎn)換。規(guī)范
的“轉(zhuǎn)換”部分沒有提到“自動”類型轉(zhuǎn)換(與自動接口轉(zhuǎn)換相反,這種轉(zhuǎn)換一直發(fā)生:)interface{}。
該線程添加
type A int
type B int
...
var a A = 5
var b B = a // Compiler ERROR!!!!!!
本質(zhì)上,由于(幾乎)所有類型都是唯一的,因此即使沒有相同的基本表示形式和基本操作的兩種類型,也必須進行強制轉(zhuǎn)換。[...]
通過強制您明確告知編譯器何時要進行轉(zhuǎn)換,從而使語言具有類型安全性。
- 2 回答
- 0 關(guān)注
- 193 瀏覽
添加回答
舉報
0/150
提交
取消