gset

并发安全集合。集合,即不可重复的一组元素,元素可以为任意类型,常见的如int,string等。

使用场景

并发安全场景下的集合操作。

使用方式

  1. import "gitee.com/johng/gf/g/container/gset"

方法列表godoc.org/github.com/johng-cn/gf/g/container/gset

  1. type Set
  2. func New(safe ...bool) *Set
  3. type IntSet
  4. func NewIntSet(safe ...bool) *IntSet
  5. func (this *IntSet) Add(item int) *IntSet
  6. func (this *IntSet) BatchAdd(items []int) *IntSet
  7. func (this *IntSet) Clear()
  8. func (this *IntSet) Contains(item int) bool
  9. func (this *IntSet) Iterator(f func(v int) bool)
  10. func (this *IntSet) LockFunc(f func(map[int]struct{}))
  11. func (this *IntSet) RLockFunc(f func(map[int]struct{}))
  12. func (this *IntSet) Remove(key int)
  13. func (this *IntSet) Size() int
  14. func (this *IntSet) Slice() []int
  15. func (this *IntSet) String() string
  16. type InterfaceSet
  17. func NewInterfaceSet(safe ...bool) *InterfaceSet
  18. func (this *InterfaceSet) Add(item interface{}) *InterfaceSet
  19. func (this *InterfaceSet) BatchAdd(items []interface{}) *InterfaceSet
  20. func (this *InterfaceSet) Clear()
  21. func (this *InterfaceSet) Contains(item interface{}) bool
  22. func (this *InterfaceSet) Iterator(f func(v interface{}) bool)
  23. func (this *InterfaceSet) LockFunc(f func(map[interface{}]struct{}))
  24. func (this *InterfaceSet) RLockFunc(f func(map[interface{}]struct{}))
  25. func (this *InterfaceSet) Remove(key interface{})
  26. func (this *InterfaceSet) Size() int
  27. func (this *InterfaceSet) Slice() []interface{}
  28. func (this *InterfaceSet) String() string
  29. type StringSet
  30. func NewStringSet(safe ...bool) *StringSet
  31. func (this *StringSet) Add(item string) *StringSet
  32. func (this *StringSet) BatchAdd(items []string) *StringSet
  33. func (this *StringSet) Clear()
  34. func (this *StringSet) Contains(item string) bool
  35. func (this *StringSet) Iterator(f func(v string) bool)
  36. func (this *StringSet) LockFunc(f func(map[string]struct{}))
  37. func (this *StringSet) RLockFunc(f func(map[string]struct{}))
  38. func (this *StringSet) Remove(key string)
  39. func (this *StringSet) Size() int
  40. func (this *StringSet) Slice() []string
  41. func (this *StringSet) String() string

使用示例:

  1. package main
  2. import (
  3. "gitee.com/johng/gf/g/container/gset"
  4. "fmt"
  5. )
  6. func main() {
  7. // 创建一个非并发安全的集合对象
  8. s := gset.New(false)
  9. // 添加数据项
  10. s.Add(1)
  11. // 批量添加数据项
  12. s.BatchAdd([]interface{}{1, 2, 3})
  13. // 集合数据项大小
  14. fmt.Println(s.Size())
  15. // 集合中是否存在指定数据项
  16. fmt.Println(s.Contains(2))
  17. // 返回数据项slice
  18. fmt.Println(s.Slice())
  19. // 删除数据项
  20. s.Remove(3)
  21. // 遍历数据项
  22. s.Iterator(func(v interface{}) bool {
  23. fmt.Println("Iterator:", v)
  24. return true
  25. })
  26. // 将集合转换为字符串
  27. fmt.Println(s.String())
  28. // 并发安全写锁操作
  29. s.LockFunc(func(m map[interface{}]struct{}) {
  30. m[4] = struct{}{}
  31. })
  32. // 并发安全读锁操作
  33. s.RLockFunc(func(m map[interface{}]struct{}) {
  34. fmt.Println(m)
  35. })
  36. // 清空集合
  37. s.Clear()
  38. fmt.Println(s.Size())
  39. }

执行后,输出结果为:

  1. 3
  2. true
  3. [1 2 3]
  4. Iterator: 1
  5. Iterator: 2
  6. [1 2]
  7. map[1:{} 2:{} 4:{}]
  8. 0