导读:本期聚焦于小伙伴创作的《Go语言中创建Map:{}字面量与make()函数的异同与选择》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Go语言中创建Map:{}字面量与make()函数的异同与选择》有用,将其分享出去将是对创作者最好的鼓励。

Go语言中Map是一种无序的键值对集合,创建Map时最常用的两种方式是通过{}字面量初始化和使用make()函数创建,这两种方式在使用场景和底层表现上存在一定差异,开发者需要根据实际需求选择合适的创建方式。

Go语言中创建Map:{}字面量与make()函数的异同与选择

两种创建方式的基础用法

{}字面量创建Map

{}字面量是Go语言提供的语法糖,可以在声明Map的同时直接初始化键值对,也可以创建空Map。这种方式写起来简洁直观,适合已知初始键值对的场景。

package main

import "fmt"

func main() {
    // 带初始键值对的字面量创建
    m1 := map[string]int{
        "a": 1,
        "b": 2,
    }
    fmt.Println(m1) // 输出 map[a:1 b:2]

    // 空Map的字面量创建
    m2 := map[string]int{}
    fmt.Println(m2 == nil) // 输出 false,空Map不是nil
}

make()函数创建Map

make()是Go语言的内置函数,专门用于创建切片、Map、通道等引用类型,创建Map时可以指定初始容量,适合需要预先分配空间以减少后续扩容开销的场景。

package main

import "fmt"

func main() {
    // 创建初始容量为10的Map
    m1 := make(map[string]int, 10)
    fmt.Println(len(m1)) // 输出 0,容量不影响长度
    fmt.Println(m1 == nil) // 输出 false

    // 不指定容量创建Map
    m2 := make(map[string]int)
    fmt.Println(m2) // 输出 map[]
}

两种方式的异同点对比

相同点

  • 创建的都是非nil的Map,都可以直接进行键值对的赋值操作,不会触发panic。
  • 都支持后续动态添加、删除、修改键值对,底层都是基于哈希表实现,操作的时间复杂度都是O(1)平均情况。
  • 都可以被垃圾回收机制正常回收,只要没有额外的引用指向该Map。

不同点

对比维度{}字面量make()函数
初始键值对支持直接初始化键值对,语法更简洁无法直接初始化键值对,需要先创建再赋值
容量设置无法指定初始容量,默认使用运行时计算的最小容量可以指定初始容量,减少后续插入时的扩容次数
空Map表现空字面量map[string]int{}是非nil的空Mapmake(map[string]int)也是非nil的空Map,表现一致
适用场景已知初始键值对,或不需要预分配容量的场景需要预分配容量,或键数量可以预估的场景

选择建议

在实际开发中可以按照以下原则选择创建方式:

  • 如果已经明确知道Map的初始键值对,优先使用{}字面量,代码更简洁易懂,例如配置项映射、固定的枚举映射等场景。
  • 如果Map的键数量可以预估,且后续会插入大量键值对,优先使用make()函数并指定合理的初始容量,减少哈希表扩容带来的性能开销,例如批量处理数据时构建的临时Map。
  • 如果只是需要一个空的Map后续再动态赋值,两种方式都可以,没有显著的性能差异,可以根据团队代码规范统一选择。

注意事项

需要注意区分Map的零值和字面量创建的空Map,未初始化的Map零值是nil,直接对nil Map插入键值对会触发panic,而两种方式创建的Map都是非nil的,可以安全操作。

package main

import "fmt"

func main() {
    var m map[string]int // 零值nil
    // m["a"] = 1 // 这行会触发panic: assignment to entry in nil map
    fmt.Println(m == nil) // 输出 true

    m1 := map[string]int{}
    m1["a"] = 1 // 正常执行
    fmt.Println(m1) // 输出 map[a:1]
}
提示:Map的初始容量只是一个提示,运行时会根据实际情况调整,指定容量不代表Map的最大长度,只是减少扩容次数。

GoMapmake_function字面量创建修改时间:2026-06-04 16:33:11

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。