Go语言技巧:利用空结构体实现高效集合

简介: Go语言技巧:利用空结构体实现高效集合

Go语言技巧:利用空结构体实现高效集合

在Go开发中,集合(Set)是常用的数据结构,但Go标准库并未直接提供。本文将介绍一个优雅的技巧——利用空结构体struct{}来实现高性能集合。

为什么选择空结构体?

空结构体在Go中占据零字节内存。当我们用map[string]struct{}表示集合时,每个键只占用键本身的内存,值不占用额外空间。相比之下,map[string]bool每个键还要额外存储一个布尔值。

基础实现

type Set map[string]struct{
   }

func NewSet(items ...string) Set {
   
    s := make(Set)
    for _, item := range items {
   
        s.Add(item)
    }
    return s
}

func (s Set) Add(item string) {
   
    s[item] = struct{
   }{
   }
}

func (s Set) Contains(item string) bool {
   
    _, ok := s[item]
    return ok
}

func (s Set) Remove(item string) {
   
    delete(s, item)
}

并发安全版本

若需并发使用,可结合sync.RWMutex

type SafeSet struct {
   
    m map[string]struct{
   }
    mu sync.RWMutex
}

性能对比

基准测试显示,map[string]struct{}相比map[string]bool在内存分配上减少约33%,GC压力也明显降低。

扩展技巧

泛型版本(Go 1.18+):

type Set[T comparable] map[T]struct{
   }

这个轻量级实现既保持了代码简洁,又获得了最佳性能,是Go语言中“少即是多”哲学的典型体现。

目录
相关文章
|
1天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
10091 24
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
13天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
5820 14
|
21天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
22737 119

热门文章

最新文章