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

Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的操作方法

 更新時(shí)間:2021年10月14日 10:23:13   作者:m0_62924778  
這篇文章主要介紹了Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近開(kāi)始實(shí)習(xí),工作技術(shù)棧主要Python和Golang,目前的任務(wù)把Python模塊重構(gòu)為GO模塊,然后出現(xiàn)了一個(gè)問(wèn)題,就是要將一個(gè)結(jié)構(gòu)體按結(jié)構(gòu)體中各個(gè)字段進(jìn)行排序,然后寫(xiě)入Redis,對(duì)于Pyhon來(lái)說(shuō)for循環(huán)就能解決,但是對(duì)于Go語(yǔ)言來(lái)說(shuō),每一次排序都要寫(xiě)一個(gè)比較函數(shù),寫(xiě)出來(lái)的代碼太丑,非常長(zhǎng),代碼結(jié)構(gòu)是一致,只是比較字段不一樣而已,個(gè)人無(wú)法接受啊,網(wǎng)上搜索也沒(méi)搜索到合適解決方法,所以自己想了一個(gè)解決方法來(lái)優(yōu)雅排序。

比較函數(shù):

func reflectCmp(i, j interface{}, fieldName string) bool {  //按傳入fieldName 排序
	valI := reflect.ValueOf(i).FieldByName(fieldName).Interface()
	valJ := reflect.ValueOf(j).FieldByName(fieldName).Interface()
	switch s := valI.(type) {
	case string:
		return s < valJ.(string)
	case float64:
		return s < valJ.(float64)
	case int:
		return s < valJ.(int)
	default:
		fmt.Println("The type is unknown")
	}
	return true
}

將自己要比較的類型加入switch中即可。

假設(shè)我們有一個(gè)結(jié)構(gòu)體為

type person struct {
	Age int
	Name string
}

那么如何來(lái)排序呢?

func main() {
	pSlice := []person{{20,"a"},{15,"be"},{32,"cc"},{2,"aa"}}
	var p person
	typeOfA := reflect.TypeOf(p)
 
	// 遍歷結(jié)構(gòu)體所有成員
	for i := 0; i < typeOfA.NumField(); i++ {
		// 獲取每個(gè)成員的結(jié)構(gòu)體字段類型
		fieldType := typeOfA.Field(i)
		sort.Slice(pSlice,func(i, j int) bool {
			return reflectCmp(pSlice[i],pSlice[j],fieldType.Name)
		})
		fmt.Println(pSlice)
	}
}

 運(yùn)行結(jié)果

利用反射,不管結(jié)構(gòu)體有多少個(gè)字段,我們都能用一個(gè)for 排序即可優(yōu)雅完成排序。

到此這篇關(guān)于Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的文章就介紹到這了,更多相關(guān)Golang反射結(jié)構(gòu)體排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang判斷key是否在map中的代碼

    golang判斷key是否在map中的代碼

    這篇文章主要介紹了golang判斷key是否在map中的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang中的閉包(Closures)詳解

    Golang中的閉包(Closures)詳解

    在?Golang?中,閉包是一個(gè)引用了作用域之外的變量的函數(shù),Golang?中的匿名函數(shù)也被稱為閉包,閉包可以被認(rèn)為是一種特殊類型的匿名函數(shù),所以本文就給大家詳細(xì)的介紹一下Golang的閉包到底是什么,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-07-07
  • Go語(yǔ)言如何使用分布式鎖解決并發(fā)問(wèn)題

    Go語(yǔ)言如何使用分布式鎖解決并發(fā)問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了Go 語(yǔ)言生態(tài)中基于 Redis 實(shí)現(xiàn)的分布式鎖庫(kù) redsync,并探討其使用方法和實(shí)現(xiàn)原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • 解析Go的Waitgroup和鎖的問(wèn)題

    解析Go的Waitgroup和鎖的問(wèn)題

    大家在學(xué)習(xí)go語(yǔ)言的時(shí)候,都知道go語(yǔ)言支持并發(fā),使用 goroutine,使用關(guān)鍵字 go 即可,接下來(lái)通過(guò)本文給大家分享Go的Waitgroup和鎖的問(wèn)題,需要的朋友可以參考下
    2021-05-05
  • GoLang bytes.Buffer基礎(chǔ)使用方法詳解

    GoLang bytes.Buffer基礎(chǔ)使用方法詳解

    Go標(biāo)準(zhǔn)庫(kù)中的bytes.Buffer(下文用Buffer表示)類似于一個(gè)FIFO的隊(duì)列,它是一個(gè)流式字節(jié)緩沖區(qū),我們可以持續(xù)向Buffer尾部寫(xiě)入數(shù)據(jù),從Buffer頭部讀取數(shù)據(jù)。當(dāng)Buffer內(nèi)部空間不足以滿足寫(xiě)入數(shù)據(jù)的大小時(shí),會(huì)自動(dòng)擴(kuò)容
    2023-03-03
  • GO語(yǔ)言創(chuàng)建錢包并遍歷錢包(wallet)的實(shí)現(xiàn)代碼

    GO語(yǔ)言創(chuàng)建錢包并遍歷錢包(wallet)的實(shí)現(xiàn)代碼

    比特幣錢包實(shí)際上是一個(gè)密鑰對(duì),當(dāng)你安裝 一個(gè)錢包應(yīng)用,或者是使用一個(gè)比特幣客戶端來(lái)生成一個(gè)新地址是,他就會(huì)為你生成一個(gè)密鑰對(duì),今天通過(guò)本文給大家分享go語(yǔ)言遍歷錢包的相關(guān)知識(shí),一起看看吧
    2021-05-05
  • Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update

    Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update

    這篇文章主要介紹了Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • go mod 依賴管理的具體使用

    go mod 依賴管理的具體使用

    在Go語(yǔ)言開(kāi)發(fā)中,依賴管理是一項(xiàng)非常重要的工作,Go mod作為官方的包管理工具已經(jīng)成為了Go語(yǔ)言依賴管理的首選方式,本文就來(lái)介紹一下go mod 依賴管理的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Go語(yǔ)言實(shí)現(xiàn)生成樣式美觀的PDF文件

    Go語(yǔ)言實(shí)現(xiàn)生成樣式美觀的PDF文件

    使用?Go?語(yǔ)言生成樣式美觀的?PDF?文件是一個(gè)常見(jiàn)的需求,尤其是在報(bào)告生成、發(fā)票、合同等場(chǎng)景中,下面就跟隨小編一起來(lái)學(xué)習(xí)一下具體實(shí)現(xiàn)方法吧
    2025-01-01
  • 關(guān)于golang高并發(fā)的實(shí)現(xiàn)與注意事項(xiàng)說(shuō)明

    關(guān)于golang高并發(fā)的實(shí)現(xiàn)與注意事項(xiàng)說(shuō)明

    這篇文章主要介紹了關(guān)于golang高并發(fā)的實(shí)現(xiàn)與注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05

最新評(píng)論

桦南县| 德化县| 萨迦县| 洪雅县| 金平| 饶河县| 牡丹江市| 西平县| 驻马店市| 赣州市| 寿宁县| 五莲县| 莆田市| 天门市| 金山区| 沙河市| 嘉峪关市| 恭城| 朝阳区| 德昌县| 安丘市| 浦江县| 衡水市| 蓬溪县| 通山县| 深泽县| 云浮市| 河北省| 英德市| 扎赉特旗| 哈巴河县| 安岳县| 哈尔滨市| 眉山市| 广灵县| 浪卡子县| 株洲市| 罗城| 南陵县| 桑植县| 甘洛县|