go语言中有set集合吗
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"go语言中有set集合吗",内容详细,步骤清晰,细节处理妥当,希望这篇"go语言中有set集合吗"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。go语
千家信息网最后更新 2026年11月03日go语言中有set集合吗
本文小编为大家详细介绍"go语言中有set集合吗",内容详细,步骤清晰,细节处理妥当,希望这篇"go语言中有set集合吗"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对set的操作,但有两种实现方法:1、使用map实现,map中的key为唯一值,这与set的特性一致;2、使用golang-set包实现。
本教程操作环境:windows10系统、GO 1.11.2、Dell G3电脑。
Go中是不提供Set类型,Set是一个集合,set里的元素不能重复。但可以使用两种方法set集合:
map
golang-set
使用map实现
在Golang中通常使用map来实现set,map中的key为唯一值,这与set的特性一致。
简单实现,如下:
set := make(map[string]bool) // New empty setset["Foo"] = true // Addfor k := range set { // Loop fmt.Println(k)}delete(set, "Foo") // Deletesize := len(set) // Sizeexists := set["Foo"] // Membershipmap的value值是布尔型,这会导致set多占用内存空间,解决这个问题,则可以将其替换为空结构。在Go中,空结构通常不使用任何内存。
unsafe.Sizeof(struct{}{}) // 结果为 0优化后,如下:
type void struct{}var member voidset := make(map[string]void) // New empty setset["Foo"] = member // Addfor k := range set { // Loop fmt.Println(k)}delete(set, "Foo") // Deletesize := len(set) // Size_, exists := set["Foo"] // Membershipgolang-set
golang-set-A simple set type for the Go language. Also used by Docker, 1Password, Ethereum.
在github上已经有了一个成熟的包,名为golang-set,包中提供了线程安全和非线程安全的set。提供了五个set函数:
// NewSet创建并返回空集的引用,结果集上的操作是线程安全的func NewSet(s ...interface{}) Set {}// NewSetFromSlice从现有切片创建并返回集合的引用,结果集上的操作是线程安全的func NewSetFromSlice(s []interface{}) Set {}// NewSetWith创建并返回具有给定元素的新集合,结果集上的操作是线程安全的func NewSetWith(elts ...interface{}) Set {}// NewThreadUnsafeSet创建并返回对空集的引用,结果集上的操作是非线程安全的func NewThreadUnsafeSet() Set {}// NewThreadUnsafeSetFromSlice创建并返回对现有切片中集合的引用,结果集上的操作是非线程安全的。func NewThreadUnsafeSetFromSlice(s []interface{}) Set {}简单案例,如下:
package mainimport ( "fmt" "github.com/deckarep/golang-set")func main() { // 默认创建的线程安全的,如果无需线程安全 // 可以使用 NewThreadUnsafeSet 创建,使用方法都是一样的。 s1 := mapset.NewSet(1, 2, 3, 4) fmt.Println("s1 contains 3: ", s1.Contains(3)) fmt.Println("s1 contains 5: ", s1.Contains(5)) // interface 参数,可以传递任意类型 s1.Add("poloxue") fmt.Println("s1 contains poloxue: ", s1.Contains("poloxue")) s1.Remove(3) fmt.Println("s1 contains 3: ", s1.Contains(3)) s2 := mapset.NewSet(1, 3, 4, 5) // 并集 fmt.Println(s1.Union(s2))}结果为:
s1 contains 3: trues1 contains 5: falses1 contains poloxue: trues1 contains 3: falseSet{1, 2, 4, poloxue, 3, 5}读到这里,这篇"go语言中有set集合吗"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
安全
线程
结果
语言
元素
文章
方法
一致
内存
内容
是非
特性
类型
结构
空集
妥当
成熟
使用方法
函数
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嘟嘟瓜互联网科技
紫鲸互联网科技
碳银互联网科技
广州凡科互联网科技
无锡溥仪互联网科技有限公司
深圳互联网科技怎么样
成都玖崟互联网科技有限公司乐商圈怎么样
现代科技和互联网有关系吗
北京大学互联网科技怎么样
中化能源互联网科技招聘
领航科技大厦互联网公司
广州有谷有贝互联网科技有限公司
新氧科技和美国互联网有关系吗
上海万顺科技互联网有限公司招聘
西安左小互联网科技有限公司
互联网科技创新创业项目
东风日产互联网科技公司叫什么
北京瑞云互联网科技有限公司
宁波允成互联网科技有限公司
颐高云石互联网科技
花魁咖啡
湖北九亚互联网络科技有限公司
九亚互联网科技
常德市电业局互联网科技部
赶超互联网科技 微信多开
区块链结合互联网科技
上海京穆互联网科技有限公司
元气玛特互联网科技公司是外包吗
美国互联网科技公司
互联网科技包装股份有限公司上市