網站首頁 編程語言 正文
前言
今天在搞一個需求,從三方獲得有信息變更的商品,更新自己的數據庫,再推送給下游進行商品更新。
期間有更新商品數量不確定,為了保證程序穩定性,每組向下游推送20個商品id。
查了garray的文檔,發現支持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的開箱體驗
普通數組
package main import ( "fmt" "github.com/gogf/gf/v2/container/garray" ) func main() { // 創建并發安全的int類型數組 a := garray.NewIntArray(true) // 添加數據項 for i := 0; i < 10; i++ { a.Append(i) } // 獲取當前數組長度 fmt.Println(a.Len()) // 獲取當前數據項列表 fmt.Println(a.Slice()) // 獲取指定索引項 fmt.Println(a.Get(6)) // 在指定索引后插入數據項 a.InsertAfter(9, 11) // 在指定索引前插入數據項 a.InsertBefore(10, 10) fmt.Println(a.Slice()) // 修改指定索引的數據項 a.Set(0, 100) fmt.Println(a.Slice()) // 搜索數據項,返回搜索到的索引位置 fmt.Println(a.Search(5)) // 刪除指定索引的數據項 a.Remove(0) fmt.Println(a.Slice()) // 并發安全,寫鎖操作 a.LockFunc(func(array []int) { // 將末尾項改為100 array[len(array)-1] = 100 }) // 并發安全,讀鎖操作 a.RLockFunc(func(array []int) { fmt.Println(array[len(array)-1]) }) // 清空數組 fmt.Println(a.Slice()) a.Clear() fmt.Println(a.Slice()) }
輸出結果如下:
下面介紹常用的方法 ??
Append
說明:向數組的尾部追加數據,可以添加任意數量字符串。Append的方法是PushRight的別名
格式:?
Append(value ...string) *StrArray
示例:建立一個空數組,設置完數據后,并在數組尾部添加新的數據。
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
說明:返回數組指定索引的數據
格式:?
At(index int) (value string)
示例:建立一個數組,找到index為2的數據。
func ExampleStrArray_At() { s := garray.NewStrArrayFrom(g.SliceStr{"We", "are", "GF", "fans", "!"}) sAt := s.At(2) fmt.Println(sAt) }
輸出結果:
GF
Chunk
說明:把指定數組按指定的大小Size,分割成多個數組,返回值為[][]string。最后一個數組包含數據的數量可能小于Size
格式:?
Chunk(size int) [][]string
示例:建立一個數組,并將該數組分割成3個數組。
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
說明:刪除當前數組中所有的數據
格式:?
Clear() *StrArray
示例:建立一個空數組,賦值后,并刪除該數組的數據。
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
說明:克隆當前的數組。返回一個與當前數組相同的數組拷貝
格式:?
Clone() (newArray *StrArray)
示例:建立一個空數組,賦值后,克隆出一個新數組。
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
說明:從數組的左側將多個字符串數據出棧,返回值為出棧的字符串數據,出棧數據的個數為size。如果size比數組的size大,那么方法將返回數組中所有的數據。如果size<=0或者為空,那么將返回nil
格式:?
PopLefts(size int) []string
示例:建立1個新數組,將最左邊的2個數據做出棧操作,并打印出出棧的數據和原數組的剩余數據
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,哈哈。
原文鏈接:https://juejin.cn/post/7090901734247104548
相關推薦
- 2022-11-29 React?useEffect使用教程_React
- 2022-01-03 當前時間與新年倒計時
- 2022-04-18 C語言數組全面總結梳理_C 語言
- 2022-06-01 Python實現訪問者模式詳情_python
- 2023-02-12 Golang中反射的常見用法分享_Golang
- 2023-12-21 Redis HyperLogLog的使用
- 2022-10-14 分布式系統Redis解決Session共享問題
- 2023-11-15 Latex解決表格過寬問題,自適應調整寬度;自動調整適合的表格大小
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支