首頁 > 軟體

GoFrame框架gset使用對比PHP Java Redis優勢

2022-06-11 14:00:04

這篇文章將會為大家介紹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優勢的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com