GoFrame garray使用实践

简介: 今天在搞一个需求,从三方获得有信息变更的商品,更新自己的数据库,再推送给下游进行商品更新。

前言


今天在搞一个需求,从三方获得有信息变更的商品,更新自己的数据库,再推送给下游进行商品更新。

期间有更新商品数量不确定,为了保证程序稳定性,每组向下游推送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())
}


输出结果如下:


微信图片_20221112190301.jpg


下面介绍常用的方法  🔽

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


输出结果:


微信图片_20221112190305.jpg


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


输出结果:


微信图片_20221112190308.jpg


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


输出结果:


微信图片_20221112190311.jpg


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


输出结果:


微信图片_20221112190315.jpg

相关文章
|
3月前
|
存储 前端开发 JavaScript
前端技术深度探索:从基础到现代框架的实践之旅
前端技术深度探索:从基础到现代框架的实践之旅
65 3
|
5月前
|
前端开发 JavaScript API
【独家揭秘】Bottle框架为何能俘获开发者的心?三大实战案例带你领略Web开发新境界!
【8月更文挑战第31天】Bottle是一款轻量级Python Web框架,以简单高效著称,秉持极简设计,适合快速开发小型项目或构建API服务。本文通过具体代码示例展示Bottle框架的独特魅力,从安装到创建应用、路由设置、模板渲染及表单处理等方面进行详细介绍,帮助读者轻松上手并掌握Bottle的应用技巧。
83 1
|
6月前
|
JSON 中间件 数据处理
实践出真知:通过项目学习Python Web框架的路由与中间件设计
【7月更文挑战第19天】探索Python Web开发,掌握Flask或Django的关键在于理解路由和中间件。路由连接URL与功能,如Flask中@app.route()定义请求响应路径。中间件在请求处理前后执行,提供扩展功能,如日志、认证。通过实践项目,不仅学习理论,还能提升构建高效Web应用的能力。示例代码展示路由定义及模拟中间件行为,强调动手实践的重要性。
69 1
|
7月前
|
中间件 数据库 数据安全/隐私保护
Django框架的深入探索与实践
本文介绍了Django,一个流行的Python Web框架,以其优雅设计和强大功能吸引开发者。Django遵循MVC模式,提供URL路由、模板引擎和ORM等核心组件,强调高效简洁的开发方式。文中详细阐述了Django的安装配置过程,核心组件包括URL路由、视图模板和模型ORM。此外,还探讨了Django的表单处理、用户认证、中间件和信号等进阶应用。Django凭借其不断发展的特性和全面的Web开发解决方案,持续受到开发者的青睐。【6月更文挑战第8天】
99 4
|
8月前
|
IDE 测试技术 Go
【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试
用于验证已经修改或新增功能后,软件的既有功能是否受到影响。
136 2
|
7月前
|
算法 安全 Java
技术经验分享:JavaSecurity:Java加密框架(JCA)简要说明
技术经验分享:JavaSecurity:Java加密框架(JCA)简要说明
|
架构师 测试技术 API
深入浅出聊一聊自动化架构!
深入浅出聊一聊自动化架构!
188 1
|
8月前
|
NoSQL Redis
goFrame v2.6 gredis 报错
goFrame v2.6 gredis 报错问题解决
190 0
|
8月前
|
Dubbo Java 应用服务中间件
已跪,Java全能笔记爆火,分布式/开源框架/微服务/性能调优全有
程序员,立之根本还是技术,一个程序员的好坏,虽然不能完全用技术强弱来判断,但是技术水平一定是基础,技术差的程序员只能CRUD,技术不深的程序员也成不了架构师。程序员对于技术的掌握,除了从了解-熟悉-熟练-精通的过程以外,还应该从基础出发,到进阶,到源码,到实战。所以,程序员想要成功,首先要成就自己。
|
设计模式 前端开发 JavaScript
前端Web开发学习,入门到进阶,推荐几本很不错的书籍
前端Web开发学习,入门到进阶,推荐几本很不错的书籍
178 0