溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

GoFrame框架gset如何使用

發(fā)布時間:2022-06-13 10:39:13 來源:億速云 閱讀:160 作者:zzz 欄目:開發(fā)技術(shù)

這篇“GoFrame框架gset如何使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“GoFrame框架gset如何使用”文章吧。

    特點

    集合gset:一組不可重復(fù)的元素,元素可以是任何類型

    GoFrame的garray為什么比PHP的array還好用? garray的排序數(shù)組也可以通過設(shè)置SetUnique(true),設(shè)置元素不可重復(fù)的特性。

    使用入門

    • 支持設(shè)置并發(fā)安全的開關(guān)

    • 批量添加元素時,注意傳參:切片后要加上... 即把切片打散之后添加

    • Size() 獲得集合大小

    • Contains() 判斷是否包含指定值

    • Remove() 移除元素

    • 支持使用Iterator遍歷

    • 可以通過 集合.String() ,一鍵將集合轉(zhuǎn)成字符串

    • 通過 集合.LockFunc() 實現(xiàn)并發(fā)安全寫操作

    • 通過 集合.RLockFunc() 實現(xiàn)并發(fā)安全讀操作

    • Clear() 清空集合

    package main
    import (
       "fmt"
       "github.com/gogf/gf/container/gset"
    )
    func main() {
       //創(chuàng)建一個并發(fā)安全的集合對象
       s := gset.New(true)
       //添加數(shù)據(jù)
       s.Add(1)
       // 批量添加數(shù)據(jù)
       s.Add([]interface{}{2, 3, 4, 5}...) //注意 這里要用... 即把切片打散之后添加
       // 打印結(jié)果
       fmt.Println(s)
       fmt.Println("集合的大?。?quot;, s.Size())
       fmt.Println("集合的大?。?quot;, s.Size())
       fmt.Println("集合中是否包含某個值:", s.Contains(5))
       fmt.Println("集合中是否包含某個值:", s.Contains(10))
       fmt.Println("返回數(shù)據(jù)項:", s.Slice())
       s.Remove(1) //刪除的是數(shù)據(jù)項 不是根據(jù)索引刪除
       fmt.Println("remove刪除數(shù)據(jù)項之后:", s)
       // 遍歷
       s.Iterator(func(v interface{}) bool {
          fmt.Println("遍歷結(jié)果:", v)
          return true
       })
       // 集合轉(zhuǎn)字符串
       fmt.Println("集合轉(zhuǎn)字符串:", s.String())
       // 并發(fā)安全寫鎖操作
       s.LockFunc(func(m map[interface{}]struct{}) {
          m[6] = struct{}{}
       })
       // 并發(fā)安全讀鎖操作
       s.RLockFunc(func(m map[interface{}]struct{}) {
          fmt.Println("并發(fā)安全讀鎖操作:", m)
       })
       // 清空集合
       s.Clear()
       fmt.Println("清空集合后:", s)
    }

    打印結(jié)果

    GoFrame框架gset如何使用

    對比PHP和Java

    PHP

    PHP是沒有Set數(shù)據(jù)類型的,set關(guān)鍵字作為一個賦值函數(shù)使用。在PHP中,__set()方法可以用于為私有成員屬性設(shè)置值,給一個未定義的屬性賦值時會被觸發(fā);

    使用Set一個非常重要的場景就是使用交差并補集;之前用PHP開發(fā)項目時,我們是使用Redis的Set來實現(xiàn)交差并補集需求的。

    GoFrame框架gset如何使用

    JAVA

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

    GO原生

    Go原生也是不提供Set類型的,但是GoFrame為我們提供了gset類型。

    GoFrame

    我們可以基于gset實現(xiàn)不可重復(fù)元素的需求,當(dāng)然,如果是Java轉(zhuǎn)Go的同學(xué),使用gset應(yīng)該會更加得心應(yīng)手。

    延伸

    下圖是Go原生提供的數(shù)據(jù)類型,讓我們確信go原生并未支持set類型,但是支持Map類型。

    而Map的key不能有重復(fù)值,當(dāng)我們使用Go原生開發(fā)時,如果要實現(xiàn)不可重復(fù)元素的需求可以使用Map的這一特性。

    Go原生開發(fā)要實現(xiàn)交差并補集,一樣可以像我們一樣,使用Redis的集合set,Redis還支持有序集合(sorted set)。

    GoFrame框架gset如何使用

    以上就是關(guān)于“GoFrame框架gset如何使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI