如果我想比較兩種類型——字符串和接口{},我通常會(huì)寫:package mainimport "log"func main() { var p1 interface{} var p2 string p1 = "123" p2 = "123" if v, ok := p1.(string); ok { log.Println(v == p2) } else { log.Println("false") }}我認(rèn)為它是type(p1) != string時(shí)的保存變體。但是如果我寫它是正確的嗎?:package mainimport "log"func main() { var p1 interface{} var p2 string p1 = "123" p2 = "123" log.Println(p1 == p2)}如果 type(p1) != string 沒有錯(cuò)誤。但它是相同的變體還是我應(yīng)該寫上一個(gè)?去
1 回答

斯蒂芬大帝
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
對(duì)您的直接問題的簡(jiǎn)短回答是yes,盡管原始代碼(您問題中的第一個(gè)片段)顯示了對(duì)類型檢查的更多考慮,因此從軟件工程的角度來看它可能更正確。如果不了解更多上下文,很難說清楚。
根據(jù)Go 規(guī)范:
接口值具有可比性。如果兩個(gè)接口值具有相同的動(dòng)態(tài)類型和相同的動(dòng)態(tài)值,或者兩者都具有值 nil,則它們是相等的。
當(dāng)類型 X 的值可比較且 X 實(shí)現(xiàn) T 時(shí),非接口類型 X 的值 x 和接口類型 T 的值 t 是可比較的。如果 t 的動(dòng)態(tài)類型與 X 相同且 t 的動(dòng)態(tài)值等于 x,則它們相等.
我相信您的要求屬于此處第二段的條款。
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)
0/150
提交
取消