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

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

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

前言

今天在搞一個(gè)需求,從三方獲得有信息變更的商品,更新自己的數(shù)據(jù)庫(kù),再推送給下游進(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ù)組長(zhǎng)度
   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("王", "中", "陽(yáng)")
   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)文章

  • Go設(shè)計(jì)模式之單例模式講解和代碼示例

    Go設(shè)計(jì)模式之單例模式講解和代碼示例

    單例是一種創(chuàng)建型設(shè)計(jì)模式,讓你能夠保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問該實(shí)例的全局節(jié)點(diǎn),本文就通過代碼示例給大家講講Go單例模式,需要的朋友可以參考下
    2023-07-07
  • Go語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)JSON

    Go語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)JSON

    本文主要介紹了Go語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)JSON,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    這篇文章主要介紹了golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang之JWT實(shí)現(xiàn)的示例代碼

    golang之JWT實(shí)現(xiàn)的示例代碼

    這篇文章主要介紹了golang之JWT實(shí)現(xiàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Go語(yǔ)言里的new函數(shù)用法分析

    Go語(yǔ)言里的new函數(shù)用法分析

    這篇文章主要介紹了Go語(yǔ)言里的new函數(shù)用法,實(shí)例分析了new函數(shù)的功能及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • golang框架中跨服務(wù)的最佳通信協(xié)議和工具

    golang框架中跨服務(wù)的最佳通信協(xié)議和工具

    在 go 框架中實(shí)現(xiàn)跨服務(wù)通信的最佳實(shí)踐包括使用 grpc(適用于低延遲高吞吐量)、http 客戶端(適用于 restful api)和消息隊(duì)列(適用于異步解耦通信),在選擇通信方式時(shí),應(yīng)考慮服務(wù)交互模式、性能要求和部署環(huán)境等因素
    2024-06-06
  • Go類型安全的HTTP請(qǐng)求示例詳解

    Go類型安全的HTTP請(qǐng)求示例詳解

    這篇文章主要為大家介紹了Go類型安全的HTTP請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言題解LeetCode599兩個(gè)列表的最小索引總和

    Go語(yǔ)言題解LeetCode599兩個(gè)列表的最小索引總和

    這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode599兩個(gè)列表的最小索引總和示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解golang中Context超時(shí)控制與原理

    詳解golang中Context超時(shí)控制與原理

    Context本身的含義是上下文,我們可以理解為它內(nèi)部攜帶了超時(shí)信息、退出信號(hào),以及其他一些上下文相關(guān)的值,本文給大家詳細(xì)介紹了golang中Context超時(shí)控制與原理,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • Go語(yǔ)言非main包編譯為靜態(tài)庫(kù)并使用的示例代碼

    Go語(yǔ)言非main包編譯為靜態(tài)庫(kù)并使用的示例代碼

    本文以Windows為例,介紹一下如何將Go的非main包編譯為靜態(tài)庫(kù),用戶又將如何使用。通過實(shí)際項(xiàng)目創(chuàng)建常規(guī)工程,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07

最新評(píng)論

利辛县| 利津县| 焦作市| 衡山县| 闸北区| 饶河县| 内江市| 勃利县| 浦城县| 新宾| 崇仁县| 女性| 石城县| 云霄县| 新乡县| 宝兴县| 浏阳市| 陆河县| 澄城县| 宁蒗| 恩施市| 旌德县| 文化| 凉山| 连城县| 伊金霍洛旗| 万年县| 普洱| 乐清市| 玉林市| 石阡县| 屏山县| 酉阳| 昌乐县| 长丰县| 双辽市| 双牌县| 望江县| 东乡族自治县| 沂源县| 随州市|