欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang?中判斷兩個結構體相等的方法

 更新時間:2023年08月30日 11:20:20   作者:農夫小田  
這篇文章主要介紹了Golang?中如何判斷兩個結構體相等,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

結論

golang中,哪些數(shù)據(jù)類型是可比較的,哪些是不可比較的:

  • 可比較:Integer,F(xiàn)loating-point,String,Boolean,Complex(復數(shù)型),Pointer,Channel,Interface,Array
  • 不可比較:Slice,Map,F(xiàn)unction

同一個struct的兩個實例能不能比較

type S struct {
    Name    string
    Age     int
    Address *int
}
func main() {
    a := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
    }
    b := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
    }
   fmt.Println(a == b)   // false
}

輸出false,說明:

  • 可以比較,因為都是基礎數(shù)據(jù)類型
  • false:因為其中的指針變量 Address 的值不同,所以 a != b,如果a b 在初始化時把 Address 去掉(不給 Address 初始化),那么這時 a == b 為true, 因為ptr變量默認值是nil,又或者給 Address 成員變量賦上同一個指針變量的值,也是成立的。
type S struct {
    Name    string
    Age     int
    Address *int
   Data    []int
}
func main() {
    a := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
      Data:    []int{1, 2, 3},
    }
    b := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
      Data:    []int{1, 2, 3},
    }
   fmt.Println(a == b)  // invalid operation: a == b (struct containing []int cannot be compared)
}

報錯:Slice,Map,F(xiàn)unction不可比較

結構體比較推薦用法

type S struct {
    Name    string
    Age     int
    Address *int
   Data    []int
}
func main() {
    a := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
      Data:    []int{1, 2, 3},
    }
    b := S{
        Name:    "aa",
        Age:     1,
        Address: new(int),
      Data:    []int{1, 2, 3},
    }
   fmt.Println(reflect.DeepEqual(a, b))  // true
}

DeepEqual函數(shù)用來判斷兩個值是否深度一致。具體比較規(guī)則如下:

  • 不同類型的值永遠不會深度相等
  • 當兩個數(shù)組的元素對應深度相等時,兩個數(shù)組深度相等
  • 當兩個相同結構體的所有字段對應深度相等的時候,兩個結構體深度相等
  • 當兩個函數(shù)都為nil時,兩個函數(shù)深度相等,其他情況不相等(相同函數(shù)也不相等)
  • 當兩個interface的真實值深度相等時,兩個interface深度相等
  • map的比較需要同時滿足以下幾個
  • -兩個map都為nil或者都不為nil,并且長度要相等
  • -相同的map對象或者所有key要對應相同
  • -map對應的value也要深度相等
  • 指針,滿足以下其一即是深度相等
  • -兩個指針滿足go的==操作符
  • -兩個指針指向的值是深度相等的
  • 切片,需要同時滿足以下幾點才是深度相等
  • -兩個切片都為nil或者都不為nil,并且長度要相等
  • -兩個切片底層數(shù)據(jù)指向的第一個位置要相同或者底層的元素要深度相等
  • -注意:空的切片跟nil切片是不深度相等的
  • 其他類型的值(numbers, bools, strings, channels)如果滿足go的==操作符,則是深度相等的。要注意不是所有的值都深度相等于自己,例如函數(shù),以及嵌套包含這些值的結構體,數(shù)組等

到此這篇關于Golang 中如何判斷兩個結構體相等的文章就介紹到這了,更多相關go判斷兩個結構體相等內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go語言中的interface使用實例

    go語言中的interface使用實例

    這篇文章主要介紹了go語言中的interface使用實例,go語言中的interface是一組未實現(xiàn)的方法的集合,如果某個對象實現(xiàn)了接口中的所有方法,那么此對象就實現(xiàn)了此接口,需要的朋友可以參考下
    2015-05-05
  • Golang數(shù)組的傳遞詳解

    Golang數(shù)組的傳遞詳解

    今天小編就為大家分享一篇關于Golang數(shù)組的傳遞詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Go語言設計模式之實現(xiàn)觀察者模式解決代碼臃腫

    Go語言設計模式之實現(xiàn)觀察者模式解決代碼臃腫

    今天學習一下用?Go?實現(xiàn)觀察者模式,觀察者模式主要是用來實現(xiàn)事件驅動編程。事件驅動編程的應用還是挺廣的,除了我們都知道的能夠用來解耦:用戶修改密碼后,給用戶發(fā)短信進行風險提示之類的典型場景,在微服務架構實現(xiàn)最終一致性、實現(xiàn)事件源A?+?ES
    2022-08-08
  • go解析YAML文件(多文檔解析)

    go解析YAML文件(多文檔解析)

    本文介紹了如何使用GO語言和client-go庫處理YAML文件,特別是在Kubernetes環(huán)境下,分析了YAML的特點,如簡潔性、易讀性、可嵌套性等,并展示了相關代碼實現(xiàn),包括單文檔和多文檔的處理方法,感興趣的可以了解一下
    2024-10-10
  • Golang通過小程序獲取微信openid的方法示例

    Golang通過小程序獲取微信openid的方法示例

    這篇文章主要介紹了Golang通過小程序獲取微信openid的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Go Println和Printf的區(qū)別詳解

    Go Println和Printf的區(qū)別詳解

    這篇文章主要介紹了Go Println和Printf的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go實現(xiàn)一個輕量級并發(fā)任務調度器(支持限速)

    Go實現(xiàn)一個輕量級并發(fā)任務調度器(支持限速)

    本文主要介紹了Go實現(xiàn)一個輕量級并發(fā)任務調度器(支持限速),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • Golang中for循環(huán)的用法示例詳解

    Golang中for循環(huán)的用法示例詳解

    for循環(huán)就是讓一段代碼循環(huán)的執(zhí)行,接下來通過本文給大家講解Golang中for循環(huán)的用法,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 一文帶你掌握GoLang中的指針

    一文帶你掌握GoLang中的指針

    針是?Go?編程語言的重要組成部分,它們提供了一種直接引用和操作內存中數(shù)據(jù)的方法,在這篇文章中,我們將探討一些技巧和技巧,以掌握?GoLang?中的指針并編寫高效的代碼,需要的可以參考一下
    2023-05-05
  • go語言編程實現(xiàn)遞歸函數(shù)示例詳解

    go語言編程實現(xiàn)遞歸函數(shù)示例詳解

    這篇文章主要為大家介紹了go語言編程實現(xiàn)遞歸函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論