最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解golang各種類型是如何進行比較的

 更新時間:2024年01月08日 10:03:57   作者:weixin_42094764  
在日常開發(fā)中,比較操作是最常用的基本操作之一,可以用來判斷變量之間是否相等或者對應的大小關系,比較操作對于排序、查找和集合數據結構的實現(xiàn)至關重要,本文將深入解析golang各種類型是如何進行比較的,需要的朋友可以參考下

1.基礎類型

布爾型,數字類型(int,unit,float,complex),byte,rune,字符串類型

這些直接在同類型的情況下直接 == 比較值是否相等即可,不同類型不可比較

2.值為內存地址非指針類型

chan,func,UnsafePointer

直接 == 比較值是否相同

3.數組和切片類型

首先通過反射比較type是否相同,再比較長度len是否相同,最后循環(huán)比較值是否相同

array1 := []int{123,456}
array2 := []int{123,457}
array1Val := reflect.ValueOf(array1)
array2Val := reflect.ValueOf(array2)
if  array1Val .Type() != array2Val.Type() {
	return false
}
if array1Val.Len() != array2Val.Len() {
	return false
}
for i := 0; i < array1Val.Len(); i++ {
	if array1 [i] != array2[i]{
		return false
	}
}
return true

4.結構體

struct

結構也是首先比較type是否相同,然后循環(huán)結構體里面的字段,比較字段的值是否相等,如果是嵌套類型的結構體,就判斷字段類型后遞歸調用進行比較

type Aaa struct{
	Bbb string
	Ccc int
}
struct1 := Aaa{Bbb:"hahaha",Ccc:123}
struct2 := Aaa{Bbb:"hahaha",Ccc:456}
struct1Val := reflect.ValueOf(struct1)
struct2Val := reflect.ValueOf(struct2)
if  array1Val .Type() != array2Val.Type() {
	return false
}
for i := 0; i < struct1Val.NumField(); i++ {
	if(struct1Val.Field(i).Interface()!=struct2Val.Field(i).Interface() ){
		return false
	}
}
return true

5.字典

map

字典的比較你需要先比較type,然后比較鍵名,最后比較鍵值

map1 := map[int]int{1: 123, 2: 456}
map2 := map[int]int{1: 123, 3: 457}
map1Val := reflect.ValueOf(map1)
map2Val := reflect.ValueOf(map2)
map1Keys := map1Val.MapKeys()
map2Keys := map2Val.MapKeys()
maps := make(map[interface{}]reflect.Value)
for _, v := range map1Keys {
	maps[v.Interface()] = v
}
for _, v := range map2Keys {
	maps[v.Interface()] = v
}
for _, v := range maps {
	val1 := map1Val.MapIndex(v)
	val2 := map2Val.MapIndex(v)
	if val1.IsValid() !=  val2.IsValid() {
		return false
	} else {
		if val1.Interface() !=val2.Interface(){
			return false
		}
	}
}
return true

以上就是詳解golang各種類型如何進行比較的詳細內容,更多關于golang各種類型比較的資料請關注腳本之家其它相關文章!

相關文章

  • Golang實現(xiàn)不被復制的結構體的方法

    Golang實現(xiàn)不被復制的結構體的方法

    sync包中的許多結構都是不允許拷貝的,因為它們自身存儲了一些狀態(tài)(比如等待者的數量),如果你嘗試復制這些結構體,就會在你的?IDE中看到警告,那這是怎么實現(xiàn)的呢,下文就來和大家詳細講講
    2023-03-03
  • Go語言中服務網格Istio實戰(zhàn)

    Go語言中服務網格Istio實戰(zhàn)

    本文主要介紹了Go語言中服務網格Istio實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-04-04
  • Golang處理gRPC請求/響應元數據的示例代碼

    Golang處理gRPC請求/響應元數據的示例代碼

    前段時間實現(xiàn)內部gRPC框架時,為了實現(xiàn)在服務端攔截器中打印請求及響應的頭部信息,便查閱了部分關于元數據的資料,因為中文網絡上對于該領域的信息較少,于是在這做了一些簡單的總結,需要的朋友可以參考下
    2024-03-03
  • 基于Golang構建一個網絡漏洞掃描器

    基于Golang構建一個網絡漏洞掃描器

    Go?語言非常適合網絡編程,它在設計時就考慮到了并發(fā)性,并且擁有出色的標準庫,本文將詳細介紹如何使用?Go?語言創(chuàng)建一個簡單且相當可靠的網絡漏洞掃描器,感興趣的小伙伴可以了解下
    2025-11-11
  • Go并發(fā)編程之sync.Once使用實例詳解

    Go并發(fā)編程之sync.Once使用實例詳解

    sync.Once使用起來很簡單, 下面是一個簡單的使用案例,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • Go實現(xiàn)map轉json的示例詳解

    Go實現(xiàn)map轉json的示例詳解

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)map轉json的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-09-09
  • 詳解Golang如何比較兩個slice是否相等

    詳解Golang如何比較兩個slice是否相等

    開發(fā)中常會遇到需要比較兩個slice包含的元素是否完全相等的情況,我們通常會通過兩種方法去比較切片是否相等。這里通過幾個示例來看一下這兩種方法,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-11-11
  • go連接kafka的實現(xiàn)示例

    go連接kafka的實現(xiàn)示例

    本文主要介紹了go連接kafka的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • go語言優(yōu)雅地處理error工具及技巧詳解

    go語言優(yōu)雅地處理error工具及技巧詳解

    這篇文章主要為大家介紹了go語言優(yōu)雅地處理error工具及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Golang二維數組的使用方式

    Golang二維數組的使用方式

    之前給大家講過很多二維數組的知識,今天重點給大家介紹Golang二維數組的使用方式,通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-05-05

最新評論

华坪县| 莒南县| 卫辉市| 宝鸡市| 祥云县| 江津市| 巨鹿县| 茌平县| 克拉玛依市| 兴安县| 信丰县| 湘乡市| 金川县| 亳州市| 平阳县| 罗江县| 横山县| 区。| 巴彦淖尔市| 元江| 清镇市| 砀山县| 孟州市| 南昌县| 巢湖市| 类乌齐县| 哈巴河县| 卢龙县| 平和县| 旌德县| 滨州市| 莱芜市| 麻栗坡县| 盘山县| 军事| 璧山县| 辛集市| 钦州市| 楚雄市| 桐庐县| 马尔康县|