Golang如何声明全局固定值map常量
解决方案
Go语言中要让变量全局可用,需要将其定义为包级变量,也就是声明在所有函数的外部,注意不能使用仅支持函数内部使用的短变量声明语法:=,具体实现有两种常用方式:
方式1:声明时直接初始化
适合map的初始值是固定字面量的场景,直接在包级(所有函数外)编写如下代码即可:
// 定义在main函数外部的包级别位置 var booksPresent = map[string]bool{ "Book One": true, "Book Two": true, "Book Three": true, }
方式2:先声明后初始化
适合map初始值需要动态生成的场景:
首先在包级声明变量:
var booksPresent map[string]bool
之后在init函数或者main函数的开头完成初始化赋值:
func main() { booksPresent = map[string]bool{ "Book One": true, "Book Two": true, "Book Three": true, } // 后续业务逻辑 }
注意事项
- 变量可见性控制:当前
booksPresent首字母为小写,仅当前包内可访问,如果需要跨包调用,将首字母改为大写BooksPresent即可。 - 并发安全:如果该map会被多个goroutine同时读写,需要额外加
sync.Mutex互斥锁或者使用sync.Map实现,避免触发并发读写panic。
内容的提问来源于stack exchange,提问作者Michio Kaku
相关产品推荐
相关产品推荐

