亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

期間有更新商品數(shù)量不確定,為了保證程序穩(wěn)定性,每組向下游推送20個(gè)商品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) //商品變動(dòng)appid為0
   }
}

于是,決定今天分享 GoFrame garray的開箱體驗(yàn)

普通數(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ù)項(xiàng)
   for i := 0; i < 10; i++ {
      a.Append(i)
   }
   // 獲取當(dāng)前數(shù)組長度
   fmt.Println(a.Len())
   // 獲取當(dāng)前數(shù)據(jù)項(xiàng)列表
   fmt.Println(a.Slice())
   // 獲取指定索引項(xiàng)
   fmt.Println(a.Get(6))
   // 在指定索引后插入數(shù)據(jù)項(xiàng)
   a.InsertAfter(9, 11)
   // 在指定索引前插入數(shù)據(jù)項(xiàng)
   a.InsertBefore(10, 10)
   fmt.Println(a.Slice())
   // 修改指定索引的數(shù)據(jù)項(xiàng)
   a.Set(0, 100)
   fmt.Println(a.Slice())
   // 搜索數(shù)據(jù)項(xiàng),返回搜索到的索引位置
   fmt.Println(a.Search(5))
   // 刪除指定索引的數(shù)據(jù)項(xiàng)
   a.Remove(0)
   fmt.Println(a.Slice())
   // 并發(fā)安全,寫鎖操作
   a.LockFunc(func(array []int) {
      // 將末尾項(xiàng)改為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())
}

輸出結(jié)果如下:

下面介紹常用的方法 ??

Append

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

格式: 

Append(value ...string) *StrArray

示例:建立一個(gè)空數(shù)組,設(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)
}

輸出結(jié)果:

At

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

格式: 

At(index int) (value string)

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

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

輸出結(jié)果:

GF

Chunk

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

格式: 

Chunk(size int) [][]string

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

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

輸出結(jié)果:

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

Clear

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

格式: 

Clear() *StrArray

示例:建立一個(gè)空數(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)
}

輸出結(jié)果:

Clone

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

格式: 

Clone() (newArray *StrArray)

示例:建立一個(gè)空數(shù)組,賦值后,克隆出一個(gè)新數(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)
}

輸出結(jié)果:

PopLefts

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

格式: 

PopLefts(size int) []string

示例:建立1個(gè)新數(shù)組,將最左邊的2個(gè)數(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)
}

輸出結(jié)果:

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    golang正則之命名分組方式

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

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

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

    GoLang中Module的基本使用方法

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

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

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

    Go 代碼生成工具詳解

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

    GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例

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

最新評(píng)論