<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Map on 维克的博客</title><link>https://blogs.wuvikr.top/tags/map/</link><description>Recent content in Map on 维克的博客</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 28 Sep 2026 13:01:24 +0800</lastBuildDate><atom:link href="https://blogs.wuvikr.top/tags/map/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 语言中的 Map 类型</title><link>https://blogs.wuvikr.top/posts/go%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84map%E7%B1%BB%E5%9E%8B/</link><pubDate>Mon, 28 Sep 2026 13:01:24 +0800</pubDate><guid>https://blogs.wuvikr.top/posts/go%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84map%E7%B1%BB%E5%9E%8B/</guid><description>&lt;p>Map 是 Go 语言内置的&lt;strong>键值对（key-value）哈希集合&lt;/strong>，属于引用类型，核心作用是通过唯一键快速索引对应值，查询、插入、删除的平均时间复杂度均为&lt;code>O(1)&lt;/code>，是 Go 开发中最常用的数据结构之一。&lt;/p>
&lt;h1 id="1-map-的基础特性">1. Map 的基础特性&lt;/h1>
&lt;ul>
&lt;li>&lt;strong>键唯一性&lt;/strong>：同一个 Map 中，key 唯一，重复插入会覆盖旧值。&lt;/li>
&lt;li>&lt;strong>键类型限制&lt;/strong>：key 必须是&lt;strong>可比较类型&lt;/strong>（int、string、bool、结构体等），切片、map、函数不可作为 key。&lt;/li>
&lt;li>&lt;strong>无序性&lt;/strong>：Map 不存储键值对插入顺序，遍历顺序随机（Go 1.12+ 每次遍历顺序不一致）。&lt;/li>
&lt;li>&lt;strong>零值特性&lt;/strong>：Map 零值为 &lt;code>nil&lt;/code>，&lt;code>nil map&lt;/code> 无法写入数据，仅可读取。&lt;/li>
&lt;li>&lt;strong>引用类型&lt;/strong>：赋值、传参仅传递引用，多个变量指向同一个底层数据&lt;/li>
&lt;/ul>
&lt;h1 id="2-map-的四种初始化方式">2. Map 的四种初始化方式&lt;/h1>
&lt;p>Go 语言 Map 必须初始化后才能写入数据，未初始化的&lt;code>nil map&lt;/code>直接写入会触发运行时 panic。以下是所有合法初始化方式。&lt;/p>
&lt;h2 id="21-声明未初始化nil-map">2.1 声明未初始化（&lt;code>nil map&lt;/code>）&lt;/h2>
&lt;p>仅定义变量，未分配内存，零值为&lt;code>nil&lt;/code>，只能读、不能写。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">package&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#e6db74">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 声明nil map，未初始化&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">m&lt;/span> &lt;span style="color:#66d9ef">map&lt;/span>[&lt;span style="color:#66d9ef">string&lt;/span>]&lt;span style="color:#66d9ef">int&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#a6e22e">m&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#66d9ef">nil&lt;/span>) &lt;span style="color:#75715e">// 输出：true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// m[&amp;#34;a&amp;#34;] = 1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 报错：panic: assignment to entry in nil map&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="22-字面量初始化空-map带初始值">2.2 字面量初始化（空 Map/带初始值）&lt;/h2>
&lt;p>直接初始化并分配内存，支持空 Map 和预设键值对，最常用。&lt;/p></description></item></channel></rss>