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

GoFrame?glist?基礎(chǔ)使用和自定義遍歷

 更新時(shí)間:2022年06月10日 08:36:40   作者:王中陽(yáng)Go  
這篇文章主要為大家介紹了GoFrame?glist的基礎(chǔ)使用和自定義遍歷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

基礎(chǔ)概念

GoFrame框架(下文簡(jiǎn)稱gf)提供的數(shù)據(jù)類型,比如:字典gmap、數(shù)組garray、集合gset、隊(duì)列g(shù)queue、樹(shù)形結(jié)構(gòu)gtree、鏈表glist都是支持設(shè)置并發(fā)安全開(kāi)關(guān)的。

支持設(shè)置并發(fā)安全開(kāi)關(guān)這也是gf提供的常用數(shù)據(jù)類型和原生數(shù)據(jù)類型非常重要的區(qū)別

今天和大家分享gf框架的glist詳解:

基本使用

glist的使用場(chǎng)景是:雙向鏈表

  • 通過(guò)PushBack向鏈表尾部插入數(shù)據(jù)
  • 通過(guò)PushFront向鏈表頭部插入數(shù)據(jù)
  • 通過(guò)InsertBefore向指定位置前插入數(shù)據(jù)
  • 通過(guò)InsertAfter向指定位置后插入數(shù)據(jù)
  • 通過(guò)PopBacks從尾部取出數(shù)據(jù)
  • 通過(guò)PopFronts從頭部取出數(shù)據(jù)
package main
import (
   "github.com/gogf/gf/container/glist"
   "github.com/gogf/gf/frame/g"
)
func main() {
   //帶并發(fā)安全開(kāi)關(guān)的雙向鏈表
   l := glist.New()
   //push方法
   l.PushBack(1)
   l.PushBack(2)
   e := l.PushFront(0)
   g.Dump("l的值:", l) //l的值:"[0,1,2]"
   //insert添加方法
   l.InsertBefore(e, -1)
   g.Dump("insert之后的值:", l) //insert之后的值:"[-1,0,1,2]"
   l.InsertAfter(e, 0.2)
   g.Dump("InsertAfter之后:", l) //InsertAfter之后:"[-1,0,0.2,1,2]"
   //pop
   l.PopBacks(1)
   g.Dump("PopBacks之后:", l) //PopBacks之后:"[-1,0,0.2,1]" 即彈出了最后一個(gè)值
   l.PopFronts(1)
   g.Dump("PopFronts之后:", l) //PopFronts之后:"[0,0.2,1]" 即彈出了最前面的一個(gè)值
}

打印結(jié)果

glist鏈表遍歷

鏈表的遍歷是常用的場(chǎng)景

  • 我們可以通過(guò)原生方法IteratorAsc實(shí)現(xiàn)正序遍歷
  • 可以通過(guò)原生方法IteratorDesc實(shí)現(xiàn)倒序遍歷

當(dāng)然了,我們也可以自定義遍歷規(guī)則 比如我們可以通過(guò)讀鎖和寫(xiě)鎖遍歷一個(gè)并發(fā)安全的鏈表 下方代碼塊標(biāo)注了明確的注釋。

package main
import (
   "container/list"
   "fmt"
   "github.com/gogf/gf/container/garray"
   "github.com/gogf/gf/container/glist"
)
func main() {
   l := glist.NewFrom(garray.NewArrayRange(0, 10, 1).Slice(), true)
   // 正序遍歷
   l.IteratorAsc(func(e *glist.Element) bool {
      fmt.Print(e.Value) //結(jié)果:012345678910
      return true
   })
   fmt.Println()
   // 倒序遍歷
   l.IteratorDesc(func(e *glist.Element) bool {
      fmt.Print(e.Value) //結(jié)果:109876543210
      return true
   })
   fmt.Println()
   //自定義方法 實(shí)現(xiàn)正序遍歷
   l.RLockFunc(func(list *list.List) {
      if list.Len() > 0 {
         for i, e := 0, list.Front(); i < list.Len(); i, e = i+1, e.Next() {
            fmt.Print(e.Value) //012345678910
         }
      }
   })
   fmt.Println()
   // 自定義方法 實(shí)現(xiàn)倒序遍歷
   l.RLockFunc(func(list *list.List) {
      if list.Len() > 0 {
         for i, e := 0, list.Back(); i < list.Len(); i, e = i+1, e.Prev() {
            fmt.Print(e.Value) //109876543210
         }
      }
   })
   fmt.Println()
}

打印結(jié)果

小技巧

下面分享一些我在使用中的小技巧

join

通過(guò)join處理成逗號(hào)分隔的字符串

    var l glist.List
    l.PushBacks(g.Slice{"a", "b", "c"})
    fmt.Println(l.Join(","))

打印結(jié)果

a,b,c

序列化和反序列化

呼應(yīng)一下開(kāi)頭提到的:支持設(shè)置并發(fā)安全開(kāi)關(guān)是gf提供的常用數(shù)據(jù)類型和原生數(shù)據(jù)類型非常重要的區(qū)別

gf提供的數(shù)據(jù)類型都支持序列化和反序列化就是另外一個(gè)重要特點(diǎn)了。

總結(jié)

通過(guò)這篇文章,我們了解到:

  • gf框架提供的數(shù)據(jù)結(jié)構(gòu),比如:字典gmap、數(shù)組garray、集合gset、隊(duì)列g(shù)queue、樹(shù)形結(jié)構(gòu)gtree、鏈表glist都是支持設(shè)置并發(fā)安全開(kāi)關(guān)的;而且都支持序列化和反序列化,實(shí)現(xiàn)了標(biāo)準(zhǔn)庫(kù)json數(shù)據(jù)格式的序列化/反序列化接口。
  • 學(xué)習(xí)到了glist的基礎(chǔ)使用以及如何自定義遍歷取值。

以上就是GoFrame glist 基礎(chǔ)使用和自定義遍歷的詳細(xì)內(nèi)容,更多關(guān)于GoFrame glist自定義遍歷的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PHP與Go語(yǔ)言之間的通信詳解

    PHP與Go語(yǔ)言之間的通信詳解

    相信大家都知道不同語(yǔ)言之間的通信方式有很多種,這篇文章詳細(xì)的介紹了PHP與Go語(yǔ)言之間如何通信,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-10-10
  • 一文帶你了解Go中的內(nèi)存對(duì)齊

    一文帶你了解Go中的內(nèi)存對(duì)齊

    一旦涉及到較為底層的編程,特別是與硬件交互,內(nèi)存對(duì)齊是一個(gè)必修的課題,所以這篇文章小編就想來(lái)和大家聊一聊Go語(yǔ)言中的內(nèi)存對(duì)齊,希望對(duì)大家有所幫助
    2023-10-10
  • Go語(yǔ)言通道之無(wú)緩沖通道

    Go語(yǔ)言通道之無(wú)緩沖通道

    這篇文章介紹了Go語(yǔ)言通道之無(wú)緩沖通道,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別

    golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別

    這篇文章主要介紹了golang 函數(shù)以及函數(shù)和方法的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 淺談go語(yǔ)言閉包的立即執(zhí)行和不立即執(zhí)行

    淺談go語(yǔ)言閉包的立即執(zhí)行和不立即執(zhí)行

    Go語(yǔ)言中的閉包是一種可以訪問(wèn)其定義時(shí)所在作用域變量的特殊函數(shù),閉包可以分為立即執(zhí)行和不立即執(zhí)行兩種,本文就來(lái)介紹一下go語(yǔ)言閉包的立即執(zhí)行和不立即執(zhí)行,感興趣的可以了解一下
    2025-03-03
  • go json數(shù)據(jù)轉(zhuǎn)發(fā)的實(shí)現(xiàn)代碼

    go json數(shù)據(jù)轉(zhuǎn)發(fā)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了go json數(shù)據(jù)轉(zhuǎn)發(fā)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Go實(shí)現(xiàn)快速生成固定長(zhǎng)度的隨機(jī)字符串

    Go實(shí)現(xiàn)快速生成固定長(zhǎng)度的隨機(jī)字符串

    這篇文章主要為大家詳細(xì)介紹了怎樣在Go中簡(jiǎn)單快速地生成固定長(zhǎng)度的隨機(jī)字符串,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以學(xué)習(xí)一下
    2022-10-10
  • Go語(yǔ)言中錯(cuò)誤處理的方式總結(jié)

    Go語(yǔ)言中錯(cuò)誤處理的方式總結(jié)

    這篇文章會(huì)結(jié)合?errors?中的函數(shù),來(lái)討論一下?Go?中常見(jiàn)的?error?使用方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以了解一下
    2023-07-07
  • Golang map如何生成有序的json數(shù)據(jù)詳解

    Golang map如何生成有序的json數(shù)據(jù)詳解

    最近在學(xué)習(xí)Golang,發(fā)現(xiàn)了一個(gè)問(wèn)題,覺(jué)著有必要給大家總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于Golang map如何生成有序json數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • 一文帶你了解Golang中的并發(fā)性

    一文帶你了解Golang中的并發(fā)性

    并發(fā)是一個(gè)很酷的話題,一旦你掌握了它,就會(huì)成為一筆巨大的財(cái)富。所以本文就來(lái)和大家一起來(lái)聊聊Golang中的并發(fā)性,感興趣的可以了解一下
    2023-03-03

最新評(píng)論

沭阳县| 沁水县| 巴林右旗| 邵武市| 都匀市| 楚雄市| 和政县| 武威市| 微山县| 花莲县| 西城区| 天门市| 沙湾县| 泽州县| 高唐县| 蓝田县| 颍上县| 于田县| 克什克腾旗| 甘洛县| 盘锦市| 利津县| 门头沟区| 松阳县| 亚东县| 澜沧| 左权县| 芜湖市| 东阳市| 文水县| 牙克石市| 阿拉善左旗| 嘉定区| 东港市| 洛浦县| 泌阳县| 进贤县| 宜章县| 东至县| 黄浦区| 平乐县|