日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

GoFrame garray使用實踐

作者:王中陽 更新時間: 2022-09-22 編程語言

前言

今天在搞一個需求,從三方獲得有信息變更的商品,更新自己的數(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())
}

輸出結(jié)果如下:

image.png

下面介紹常用的方法 ?

Append

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

格式:

Append(value ...string) *StrArray

示例:建立一個空數(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é)果:

image.png

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)
}

輸出結(jié)果: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) 
}

輸出結(jié)果:[[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)
}

輸出結(jié)果:

image.png

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)
}

輸出結(jié)果:
image.png

PopLefts

說明:從數(shù)組的左側(cè)將多個字符串數(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)
}

輸出結(jié)果:

image.png

總結(jié)

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

原文鏈接:https://blog.csdn.net/w425772719/article/details/124822687

欄目分類
最近更新