我在代碼中偶然發現了這種類型別名:type LightSource = struct { R, G, B, L float32 X, Y, Z, A float32 //...}我的問題是:使用這樣的類型別名來定義 astruct而不是這樣做的原因是什么?type LightSource struct { R, G, B, L float32 //...etc}
3 回答

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
我發現類型別名對可讀性很有用。例如,在測試中,您可能會像這樣比較 JSON 解碼器的輸出:
reflect.DeepEqual(r,?map[string]interface{}{"a":?map[string]interface{}{"b":?42.0}})
但您可以使用類型別名來提高可讀性:
type?JsonObject?=?map[string]interface{} ... reflect.DeepEqual(r,?JsonObject{"a":?JsonObject{"b":?42.0}})
因為 DeepEqual 使用反射來比較類型(和值),所以使類型別名成為類型定義(通過刪除 = 字符)將導致 DeepEqual 失敗。

當年話下
TA貢獻1890條經驗 獲得超9個贊
為了補充 Rob64 的回答,他指出最終結果是相同的,但不要誤會您最終會得到兩種不同類型的事實。
type LightSource = struct { // Type struct
R, G, B, L float32
X, Y, Z, A float32
//...
}
type LightSource struct { // Type LightSource
R, G, B, L float32
//...etc
}
我覺得你最終會得到不同的類型這一事實有很多困惑,這意味著如果你在代碼中的某個地方強制執行類型 A,并且你使用錯誤的類型別名方式,你將結束對您的“類型別名”絕對零限制;如果您最終創建了類型別名,最終目標實際上是區分您的類型,但如果您犯了這個錯誤,那顯然是無效的。
- 3 回答
- 0 關注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消