Golang常量const为什么不能取地址
发布时间 - 2026-01-10 00:00:00 点击率:次Go 中 const 值没有内存地址,因其在编译期被直接替换为字面值,不分配运行时内存,故无法取地址,任何 &constValue 都会触发编译错误;需用 var 声明变量后取址。
Go 中 const 值没有内存地址
因为 const 在编译期就被替换成字面值,不分配运行时内存。Go 编译器会把所有对常量的引用直接内联为对应值(比如 const pi = 3.14159,后续写 &pi 时,编译器根本找不到一个“变量”来取地址)。
这和 C/C++ 不同:C 的 const 变量仍占内存(只是加了只读修饰),而 Go 的 const 是纯编译期符号,连符号表里都不一定保留。
&constValue 会直接报错 cannot take the address of ...
尝试对任何 const 取地址都会触发编译错误,无论类型是 int、string 还是自定义类型:
const name = "gopher" ptr := &name // 编译错误:cannot take the address of name
常见误操作场景:
立即学习“go语言免费学习笔记(深入)”;
- 想传指针给函数(比如
fmt.Printf("%s", &name))→ 改用&temp(先赋值给变量) - 初始化结构体字段为指针(
Config{Title: &name})→ 必须先声明变量:title := name; Config{Title: &title} - 在切片或 map 中存常量地址 → 不可行,需用变量兜底
替代方案:用变量包装常量再取地址
如果确实需要指针,唯一合法方式是用 var 显式声明变量,并初始化为该常量:
const mode = 0644 var modeVar = mode permPtr := &modeVar // ✅ 合法
注意点:
- 不能写成
var modeVar = constValue然后立即取地址——必须分两步或确保变量已分配空间 - 短变量声明
:=也有效:modeVar := mode; ptr := &modeVar - 这种变量不会被编译器优化掉,哪怕值和常量完全一样
为什么设计成这样?性能与语义一致性
Go 把常量视为“值本身”,不是“可寻址实体”。这种设计带来两个实际好处:
- 避免对字面值取地址引发的歧
义(比如 &42或&"hello"在其他语言中行为不一) - 让编译器能更激进地做常量折叠和内联,减少不必要的内存分配
- 强制开发者区分“不可变值”(
const)和“只读存储位置”(var + const初始化)
真正容易被忽略的是:哪怕常量类型实现了接口,也不能直接取地址转为接口指针——必须经过变量中转。这点在写泛型约束或反射逻辑时特别容易踩坑。
# go
# golang
# c++
# 编译错误
# 为什么
# String
# 常量
# printf
# const
# 结构体
# int
# 指针
# 接口
# 泛型
# var
# 切片
# map
# 需用
# 的是
# 不分配
# 找不到
# 自定义
# 会把
# 报错
# 因其
# 必须先
# 这和
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何在香港服务器上快速搭建免备案网站?
如何用狗爹虚拟主机快速搭建网站?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
LinuxCD持续部署教程_自动发布与回滚机制
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何快速查询域名建站关键信息?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何实现建站之星域名转发设置?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
java中使用zxing批量生成二维码立牌
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
JavaScript模板引擎Template.js使用详解
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
教你用AI将一段旋律扩展成一首完整的曲子
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何打造高效商业网站?建站目的决定转化率
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在阿里云虚拟服务器快速搭建网站?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
清除minerd进程的简单方法
Laravel怎么在Controller之外的地方验证数据
Android Socket接口实现即时通讯实例代码
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何记录自定义日志?(Log频道配置)
JavaScript如何实现类型判断_typeof和instanceof有什么区别
详解vue.js组件化开发实践
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何在建站宝盒中设置产品搜索功能?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel如何使用Eloquent进行子查询
JS去除重复并统计数量的实现方法
jQuery validate插件功能与用法详解
微信小程序 HTTPS报错整理常见问题及解决方案
JS经典正则表达式笔试题汇总
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
利用vue写todolist单页应用
香港网站服务器数量如何影响SEO优化效果?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何快速搭建自助建站会员专属系统?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
如何使用 jQuery 正确渲染 Instagram 风格的标签列表


义(比如