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優勢的資料請關註WalkonNet其它相關文章!

推薦閱讀: