GoFrame框架gset使用对比PHP Java Redis优势

 更新时间:2022年06月11日 11:45:07   作者:王中阳Go  
这篇文章主要为大家介绍了GoFrame框架gset对比PHP Java Redis的使用优势详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

这篇文章将会为大家介绍GoFrame gset使用入门,为了让大家更好的理解,会简明扼要的分析一下集合类型Set的特点,对比一下Java、PHP、原生Go对集合Set类型的支持情况,如果不支持Set类型,我们如何找到解决方案,来实现元素不可重复性和交差并补集的需求。

特点

集合gset:一组不可重复的元素,元素可以是任何类型

上一篇文章介绍的: GoFrame的garray为什么比PHP的array还好用? garray的排序数组也可以通过设置SetUnique(true),设置元素不可重复的特性。

使用入门

  • 支持设置并发安全的开关
  • 批量添加元素时,注意传参:切片后要加上... 即把切片打散之后添加
  • Size() 获得集合大小
  • Contains() 判断是否包含指定值
  • Remove() 移除元素
  • 支持使用Iterator遍历
  • 可以通过 集合.String() ,一键将集合转成字符串
  • 通过 集合.LockFunc() 实现并发安全写操作
  • 通过 集合.RLockFunc() 实现并发安全读操作
  • Clear() 清空集合
package main
import (
   "fmt"
   "github.com/gogf/gf/container/gset"
)
func main() {
   //创建一个并发安全的集合对象
   s := gset.New(true)
   //添加数据
   s.Add(1)
   // 批量添加数据
   s.Add([]interface{}{2, 3, 4, 5}...) //注意 这里要用... 即把切片打散之后添加
   // 打印结果
   fmt.Println(s)
   fmt.Println("集合的大小:", s.Size())
   fmt.Println("集合的大小:", s.Size())
   fmt.Println("集合中是否包含某个值:", s.Contains(5))
   fmt.Println("集合中是否包含某个值:", s.Contains(10))
   fmt.Println("返回数据项:", s.Slice())
   s.Remove(1) //删除的是数据项 不是根据索引删除
   fmt.Println("remove删除数据项之后:", s)
   // 遍历
   s.Iterator(func(v interface{}) bool {
      fmt.Println("遍历结果:", v)
      return true
   })
   // 集合转字符串
   fmt.Println("集合转字符串:", s.String())
   // 并发安全写锁操作
   s.LockFunc(func(m map[interface{}]struct{}) {
      m[6] = struct{}{}
   })
   // 并发安全读锁操作
   s.RLockFunc(func(m map[interface{}]struct{}) {
      fmt.Println("并发安全读锁操作:", m)
   })
   // 清空集合
   s.Clear()
   fmt.Println("清空集合后:", s)
}

打印结果

对比PHP和Java

PHP

PHP是没有Set数据类型的,set关键字作为一个赋值函数使用。在PHP中,__set()方法可以用于为私有成员属性设置值,给一个未定义的属性赋值时会被触发;

使用Set一个非常重要的场景就是使用交差并补集;之前用PHP开发项目时,我们是使用Redis的Set来实现交差并补集需求的。

JAVA

在Java中,是有Set类型的:存取无序,元素唯一。

GO原生

Go原生也是不提供Set类型的,但是GoFrame为我们提供了gset类型。

GoFrame

我们可以基于gset实现不可重复元素的需求,当然,如果是Java转Go的同学,使用gset应该会更加得心应手。

延伸

下图是Go原生提供的数据类型,让我们确信go原生并未支持set类型,但是支持Map类型。

而Map的key不能有重复值,当我们使用Go原生开发时,如果要实现不可重复元素的需求可以使用Map的这一特性。

Go原生开发要实现交差并补集,一样可以像我们一样,使用Redis的集合set,Redis还支持有序集合(sorted set)。

以上就是GoFrame框架gset使用对比PHP Java Redis优势的详细内容,更多关于GoFrame框架gset优势的资料请关注脚本之家其它相关文章!

相关文章

  • Nunu快速构建高效可靠Go应用脚手架使用详解

    Nunu快速构建高效可靠Go应用脚手架使用详解

    这篇文章主要为大家介绍了如何使用Nunu快速构建高效可靠Go应用脚手架详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Go WEB框架使用拦截器验证用户登录状态实现

    Go WEB框架使用拦截器验证用户登录状态实现

    这篇文章主要为大家介绍了Go WEB框架使用拦截器验证用户登录状态实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Go语言中实现打印堆栈的errors包的用法详解

    Go语言中实现打印堆栈的errors包的用法详解

    因为Go语言提供的错误太简单了,以至于简单的我们无法更好的处理问题,所以诞生了很多对错误处理的库,github.com/pkg/errors是比较简洁的一样,本文就来聊聊它的具体用法吧
    2023-07-07
  • Go使用Google Gemini Pro API创建简单聊天机器人

    Go使用Google Gemini Pro API创建简单聊天机器人

    这篇文章主要为大家介绍了Go使用Google Gemini Pro API创建简单聊天机器人实现过程详解,本文将通过最新的gemini go sdk来实现命令行聊天机器人
    2023-12-12
  • Go错误处理之panic函数和recover函数使用及捕获异常方法

    Go错误处理之panic函数和recover函数使用及捕获异常方法

    这篇文章主要介绍了Go错误处理之panic函数使用及捕获,本篇探讨了如何使用 panic 和 recover 来处理 Go 语言中的异常,需要的朋友可以参考下
    2023-03-03
  • Golang通过小程序获取微信openid的方法示例

    Golang通过小程序获取微信openid的方法示例

    这篇文章主要介绍了Golang通过小程序获取微信openid的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • golang复制文件夹移动到另一个文件夹实现方法详解

    golang复制文件夹移动到另一个文件夹实现方法详解

    这篇文章主要为大家介绍了golang复制文件夹并移动到另一个文件夹实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Go语言中的sync包同步原语最新详解

    Go语言中的sync包同步原语最新详解

    Go语言在sync包中提供了一套多才多艺的同步机制,以及用于管理对共享资源的并发访问的原子操作,了解这些工具并为您的并发需求选择合适的工具是编写高效可靠的并发Go程序的关键,这篇文章主要介绍了Go语言中的`sync`包同步原语,需要的朋友可以参考下
    2023-12-12
  • GO实现文件上传操作

    GO实现文件上传操作

    这篇文章主要为大家详细介绍了GO实现文件上传操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Go设计模式之单例模式图文详解

    Go设计模式之单例模式图文详解

    单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点,本文就通过图文给大家介绍一下Go的单例模式,需要的朋友可以参考下
    2023-07-07

最新评论