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

GoFrame框架garray并發(fā)安全數(shù)組使用開箱體驗

 更新時間:2022年06月10日 09:46:28   作者:王中陽Go  
這篇文章主要介紹了GoFrame框架garray并發(fā)安全數(shù)組使用開箱體驗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

今天在搞一個需求,從三方獲得有信息變更的商品,更新自己的數(shù)據(jù)庫,再推送給下游進行商品更新。

期間有更新商品數(shù)量不確定,為了保證程序穩(wěn)定性,每組向下游推送20個商品id。

查了garray的文檔,發(fā)現(xiàn)支持Chunk()方法,灰常好用。

func commonSendMessage(goodsIds *garray.IntArray, messageType int) {
   goodsIdsChunk := goodsIds.Chunk(20)
   for _, chunkedGoodsIds := range goodsIdsChunk {
      //給下游推送消息
      message.SendMessage(chunkedGoodsIds, messageType, 0) //商品變動appid為0
   }
}

于是,決定今天分享 GoFrame garray的開箱體驗

普通數(shù)組

package main
import (
   "fmt"
   "github.com/gogf/gf/v2/container/garray"
)
func main() {
   // 創(chuàng)建并發(fā)安全的int類型數(shù)組
   a := garray.NewIntArray(true)
   // 添加數(shù)據(jù)項
   for i := 0; i < 10; i++ {
      a.Append(i)
   }
   // 獲取當前數(shù)組長度
   fmt.Println(a.Len())
   // 獲取當前數(shù)據(jù)項列表
   fmt.Println(a.Slice())
   // 獲取指定索引項
   fmt.Println(a.Get(6))
   // 在指定索引后插入數(shù)據(jù)項
   a.InsertAfter(9, 11)
   // 在指定索引前插入數(shù)據(jù)項
   a.InsertBefore(10, 10)
   fmt.Println(a.Slice())
   // 修改指定索引的數(shù)據(jù)項
   a.Set(0, 100)
   fmt.Println(a.Slice())
   // 搜索數(shù)據(jù)項,返回搜索到的索引位置
   fmt.Println(a.Search(5))
   // 刪除指定索引的數(shù)據(jù)項
   a.Remove(0)
   fmt.Println(a.Slice())
   // 并發(fā)安全,寫鎖操作
   a.LockFunc(func(array []int) {
      // 將末尾項改為100
      array[len(array)-1] = 100
   })
   // 并發(fā)安全,讀鎖操作
   a.RLockFunc(func(array []int) {
      fmt.Println(array[len(array)-1])
   })
   // 清空數(shù)組
   fmt.Println(a.Slice())
   a.Clear()
   fmt.Println(a.Slice())
}

輸出結果如下:

下面介紹常用的方法 ??

Append

說明:向數(shù)組的尾部追加數(shù)據(jù),可以添加任意數(shù)量字符串。Append的方法是PushRight的別名

格式: 

Append(value ...string) *StrArray

示例:建立一個空數(shù)組,設置完數(shù)據(jù)后,并在數(shù)組尾部添加新的數(shù)據(jù)。

package main
import (
   "fmt"
   "github.com/gogf/gf/v2/container/garray"
   "github.com/gogf/gf/v2/frame/g"
)
func main() {
   s := garray.NewStrArray()
   s.SetArray(g.SliceStr{"We", "are", "GF", "fans"})
   s.Append("王", "中", "陽")
   fmt.Println(s)
}

輸出結果:

At

說明:返回數(shù)組指定索引的數(shù)據(jù)

格式: 

At(index int) (value string)

示例:建立一個數(shù)組,找到index為2的數(shù)據(jù)。

func ExampleStrArray_At() {
    s := garray.NewStrArrayFrom(g.SliceStr{"We", "are", "GF", "fans", "!"})
    sAt := s.At(2)
    fmt.Println(sAt)
}

輸出結果:

GF

Chunk

說明:把指定數(shù)組按指定的大小Size,分割成多個數(shù)組,返回值為[][]string。最后一個數(shù)組包含數(shù)據(jù)的數(shù)量可能小于Size

格式: 

Chunk(size int) [][]string

示例:建立一個數(shù)組,并將該數(shù)組分割成3個數(shù)組。

func ExampleStrArray_Chunk() {
    s := garray.NewStrArrayFrom(g.SliceStr{"a", "b", "c", "d", "e", "f", "g", "h"})
    r := s.Chunk(3)
    fmt.Println(r) 
}

輸出結果:

[[a b c] [d e f] [g h]]

Clear

說明:刪除當前數(shù)組中所有的數(shù)據(jù)

格式: 

Clear() *StrArray

示例:建立一個空數(shù)組,賦值后,并刪除該數(shù)組的數(shù)據(jù)。

func ExampleStrArray_Clear() {
    s := garray.NewStrArray()
    s.SetArray(g.SliceStr{"a", "b", "c", "d", "e", "f", "g", "h"})
    fmt.Println(s)
    fmt.Println(s.Clear())
    fmt.Println(s)
}

輸出結果:

Clone

說明:克隆當前的數(shù)組。返回一個與當前數(shù)組相同的數(shù)組拷貝

格式: 

Clone() (newArray *StrArray)

示例:建立一個空數(shù)組,賦值后,克隆出一個新數(shù)組。

func ExampleStrArray_Clone() {
    s := garray.NewStrArray()
    s.SetArray(g.SliceStr{"a", "b", "c", "d", "e", "f", "g", "h"})
    r := s.Clone()
    fmt.Println(r)
    fmt.Println(s)
}

輸出結果:

PopLefts

說明:從數(shù)組的左側將多個字符串數(shù)據(jù)出棧,返回值為出棧的字符串數(shù)據(jù),出棧數(shù)據(jù)的個數(shù)為size。如果size比數(shù)組的size大,那么方法將返回數(shù)組中所有的數(shù)據(jù)。如果size<=0或者為空,那么將返回nil

格式: 

PopLefts(size int) []string

示例:建立1個新數(shù)組,將最左邊的2個數(shù)據(jù)做出棧操作,并打印出出棧的數(shù)據(jù)和原數(shù)組的剩余數(shù)據(jù)

func ExampleStrArray_PopLefts() {
    s := garray.NewStrArray()
    s.SetArray(g.SliceStr{"a", "b", "c", "d", "e", "f", "g", "h"})
    r := s.PopLefts(2)
    fmt.Println(r)
    fmt.Println(s)
}

輸出結果:

總結

好了,garray的使用就先介紹到這里,是不是和PHP的array非常像,感覺框架的作者之前一定寫過PHP,哈哈。

以上就是GoFrame框架garray并發(fā)安全數(shù)組使用開箱體驗的詳細內(nèi)容,更多關于GoFrame garray并發(fā)安全數(shù)組的資料請關注腳本之家其它相關文章!

相關文章

  • golang redigo發(fā)布訂閱使用的方法

    golang redigo發(fā)布訂閱使用的方法

    本文主要介紹了golang redigo發(fā)布訂閱使用的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 分析Go語言中CSP并發(fā)模型與Goroutine的基本使用

    分析Go語言中CSP并發(fā)模型與Goroutine的基本使用

    我們都知道并發(fā)是提升資源利用率最基礎的手段,尤其是當今大數(shù)據(jù)時代,流量對于一家互聯(lián)網(wǎng)企業(yè)的重要性不言而喻。串流顯然是不行的,尤其是對于web后端這種流量的直接載體。并發(fā)是一定的,問題在于怎么執(zhí)行并發(fā)。常見的并發(fā)方式有三種,分別是多進程、多線程和協(xié)程
    2021-06-06
  • Go語言Gin框架中使用MySQL數(shù)據(jù)庫的三種方式

    Go語言Gin框架中使用MySQL數(shù)據(jù)庫的三種方式

    本文主要介紹了Go語言Gin框架中使用MySQL數(shù)據(jù)庫的三種方式,通過三種方式實現(xiàn)增刪改查的操作,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Go語言中關閉帶緩沖區(qū)的頻道實例分析

    Go語言中關閉帶緩沖區(qū)的頻道實例分析

    這篇文章主要介紹了Go語言中關閉帶緩沖區(qū)的頻道,實例分析了帶緩沖區(qū)頻道的原理與用法,以及關閉帶緩沖區(qū)頻道的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang正則之命名分組方式

    golang正則之命名分組方式

    這篇文章主要介紹了golang正則之命名分組方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang 實現(xiàn) Redis系列(六)如何實現(xiàn) pipeline 模式的 redis 客戶端

    Golang 實現(xiàn) Redis系列(六)如何實現(xiàn) pipeline 模式的 redis 客戶端

    pipeline 模式的 redis 客戶端需要有兩個后臺協(xié)程負責 tcp 通信,調(diào)用方通過 channel 向后臺協(xié)程發(fā)送指令,并阻塞等待直到收到響應,本文是使用 golang 實現(xiàn) redis 系列的第六篇, 將介紹如何實現(xiàn)一個 Pipeline 模式的 Redis 客戶端。
    2021-07-07
  • GoLang中Module的基本使用方法

    GoLang中Module的基本使用方法

    Go module是從Go 1.11版本才引入的新功能,下面這篇文章主要給大家介紹了關于GoLang中Module的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 使用go語言解析xml的實現(xiàn)方法(必看篇)

    使用go語言解析xml的實現(xiàn)方法(必看篇)

    下面小編就為大家?guī)硪黄褂胓o語言解析xml的實現(xiàn)方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Go 代碼生成工具詳解

    Go 代碼生成工具詳解

    這篇文章主要介紹了Go 代碼生成工具詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • GoFrame?gtree樹形結構的使用技巧示例

    GoFrame?gtree樹形結構的使用技巧示例

    這篇文章主要為大家介紹了GoFrame?gtree樹形結構的使用技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論