go學習(二十二)不同類型判斷相等


在判斷是否相等之前,我們先看下go中的類型都有哪些吧,不同類型比較方式不同

1、可用 == 和 != 直接比較的類型

bool布爾類型;
數值類型:兩個值具有相同的數值類型或者可以轉化為相同的類型;
string字符串;
指針:比較兩個指針是否指向內存中的同一個值,或者都為 nil;
channel:比較兩個channel是否來自同一個 make 的調用,或者都為 nil。

此外,如果 struct 和 數組是由這些可比較類型組成的,那么它們也可以進行比較相等性。
但是,map 和 slice 無法通過 == 和 != 比較相等性。

// bool, 

// 數值型:int

// string, 指針, channel
a == b
// 由以上幾種類型組成的 struct 和 數組

2、派生類型比較

(a) 指針類型(Pointer)【可用和!=】
(b) 數組類型
(c) 結構化類型(struct)
(d) channel 類型【可用
和!=】
(e) 函數類型
(f) 切片類型(slice)
(g) 接口類型(interface)
(h) map 類型

---下面未整理完---

2、[]byte(slice類型)

bytes.Equal(a,b)

3、[]xx(非byte類型的兩個slice)
非byte類型的slice,即[]xx,我們還可以借助reflect.DeepEqual,用於深度比較兩個對象包括它們內部包含的元素是否都相等:
func DeepEqual(x, y interface{}) bool

a := []byte{1, 2, 3}
b := []byte{0, 1, 3, 2}
reflect.DeepEqual(a, b)

但是,reflect的代價要大得多,非必要別用DeepEqual!

參考:
https://www.cnblogs.com/apocelipes/p/11116725.html
https://www.bilibili.com/read/cv11994623


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM