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

GoFrame?glist?基礎使用和自定義遍歷

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

基礎概念

GoFrame框架(下文簡稱gf)提供的數據類型,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置并發(fā)安全開關的。

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

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

基本使用

glist的使用場景是:雙向鏈表

  • 通過PushBack向鏈表尾部插入數據
  • 通過PushFront向鏈表頭部插入數據
  • 通過InsertBefore向指定位置前插入數據
  • 通過InsertAfter向指定位置后插入數據
  • 通過PopBacks從尾部取出數據
  • 通過PopFronts從頭部取出數據
package main
import (
   "github.com/gogf/gf/container/glist"
   "github.com/gogf/gf/frame/g"
)
func main() {
   //帶并發(fā)安全開關的雙向鏈表
   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]" 即彈出了最后一個值
   l.PopFronts(1)
   g.Dump("PopFronts之后:", l) //PopFronts之后:"[0,0.2,1]" 即彈出了最前面的一個值
}

打印結果

glist鏈表遍歷

鏈表的遍歷是常用的場景

  • 我們可以通過原生方法IteratorAsc實現正序遍歷
  • 可以通過原生方法IteratorDesc實現倒序遍歷

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

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) //結果:012345678910
      return true
   })
   fmt.Println()
   // 倒序遍歷
   l.IteratorDesc(func(e *glist.Element) bool {
      fmt.Print(e.Value) //結果:109876543210
      return true
   })
   fmt.Println()
   //自定義方法 實現正序遍歷
   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()
   // 自定義方法 實現倒序遍歷
   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()
}

打印結果

小技巧

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

join

通過join處理成逗號分隔的字符串

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

打印結果

a,b,c

序列化和反序列化

呼應一下開頭提到的:支持設置并發(fā)安全開關是gf提供的常用數據類型和原生數據類型非常重要的區(qū)別

gf提供的數據類型都支持序列化和反序列化就是另外一個重要特點了。

總結

通過這篇文章,我們了解到:

  • gf框架提供的數據結構,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置并發(fā)安全開關的;而且都支持序列化和反序列化,實現了標準庫json數據格式的序列化/反序列化接口。
  • 學習到了glist的基礎使用以及如何自定義遍歷取值。

以上就是GoFrame glist 基礎使用和自定義遍歷的詳細內容,更多關于GoFrame glist自定義遍歷的資料請關注腳本之家其它相關文章!

相關文章

  • go內存緩存BigCache之Entry封裝源碼閱讀

    go內存緩存BigCache之Entry封裝源碼閱讀

    這篇文章主要介紹了go內存緩存BigCache之Entry封裝源碼閱讀
    2023-09-09
  • 基于Go語言實現的簡易api網關的示例代碼

    基于Go語言實現的簡易api網關的示例代碼

    本文主要介紹了基于Go語言實現的簡易api網關,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang validator參數校驗的實現

    golang validator參數校驗的實現

    這篇文章主要介紹了golang validator參數校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Go?語言進階單元測試示例詳解

    Go?語言進階單元測試示例詳解

    這篇文章主要為大家介紹了Go?語言進階單元測試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 如何避免Go語言常見錯誤之意外的變量隱藏

    如何避免Go語言常見錯誤之意外的變量隱藏

    在Go語言中,變量隱藏(Variable Shadowing)是一個常見的錯誤來源,變量隱藏發(fā)生在一個內部作用域中聲明的變量與外部作用域的變量同名時,這可能導致開發(fā)者無意中使用了錯誤的變量,造成難以追蹤的bug,本文講解一些關于變量隱藏的常見錯誤和如何避免它們的方法
    2024-01-01
  • Golang爬蟲及正則表達式的實現示例

    Golang爬蟲及正則表達式的實現示例

    本文主要介紹了Golang爬蟲及正則表達式的實現示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解以go思想去處理js異常拋棄trycatch

    詳解以go思想去處理js異常拋棄trycatch

    這篇文章主要為大家介紹了詳解以go思想去處理js異常拋棄trycatch,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • golang Gorm與數據庫完整性約束詳解

    golang Gorm與數據庫完整性約束詳解

    這篇文章主要介紹了golang Gorm與數據庫完整性約束詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang 高效排序數據詳情

    Golang 高效排序數據詳情

    本文我們介紹了怎么使用 Golang 語言標準庫 sort 包排序數據,需要注意的是,除了本文使用的類型之外,其它任意類型只要實現 sort.Interface 的三個方法,都可以調用 sort.Sort() 函數排序數據。
    2021-11-11
  • 記一次go語言使用time.Duration類型踩過的坑

    記一次go語言使用time.Duration類型踩過的坑

    本文主要介紹了記一次go語言使用time.Duration類型踩過的坑,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論