3 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
我發(fā)現(xiàn)類型別名對可讀性很有用。例如,在測試中,您可能會像這樣比較 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}})
因?yàn)?DeepEqual 使用反射來比較類型(和值),所以使類型別名成為類型定義(通過刪除 = 字符)將導(dǎo)致 DeepEqual 失敗。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
為了補(bǔ)充 Rob64 的回答,他指出最終結(jié)果是相同的,但不要誤會您最終會得到兩種不同類型的事實(shí)。
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
}
我覺得你最終會得到不同的類型這一事實(shí)有很多困惑,這意味著如果你在代碼中的某個(gè)地方強(qiáng)制執(zhí)行類型 A,并且你使用錯(cuò)誤的類型別名方式,你將結(jié)束對您的“類型別名”絕對零限制;如果您最終創(chuàng)建了類型別名,最終目標(biāo)實(shí)際上是區(qū)分您的類型,但如果您犯了這個(gè)錯(cuò)誤,那顯然是無效的。
- 3 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報(bào)