Go指针是安全受控的引用机制,声明为*T,需用&或new()初始化;不可对字面量、表达式、map元素取地址;传指针用于修改原值或避免大结构体拷贝;须防nil解引用和意外共享。
Go 语言中的指针不是“C 风格的危险玩具”,而是明确、安全、且被编译器严格约束的引用机制。你不能对指针做算术运算,也不能随意转换类型,nil 检查天然友好——只要理解 & 和 * 的语义边界,就不会踩空。
Go 中指针类型写法是 *T,表示“指向类型 T 的值的地址”。声明时不会自动分配内存,必须显式赋值或用 new() / & 初始化。
var p *int:声明一个未初始化的指针,值为 nil;直接解引用会 panicp := new(int):分配一个 int 的零值内存,并返回其地址,等价于 p := &zero_int
val := 42; p := &val:取已有变量的地址,最常用也最直观注意:new(T) 返回的是 *T,但只适用于需要零值初始化的场景;而 &v 要求 v 是可寻址的(不能是字面量、函数调用结果、map 元素等)。
Go 编译器禁止对不可寻址的值取地址,这是为了防止悬垂指针和语义混乱。常见报错如:cannot take the address of ...。
&42 ❌ 字面量不可寻址&(x + y) ❌ 表达式结果是临时值&myMap["key"] ❌ map 元素地址不固定,Go 不允许取地址&mySlice[i] ✅ 切片元素可寻址(只要 mySlice 本身可寻址)&structField ✅ 结构体字段可寻址(前提是整个结构体变量可寻址)如果真需要类似效果(比如想修改 map 中某个字段),得先取出值到局部变量,修改后再写回:v := myMap["key"]; v.Field = 123; myMap["key"] = v。
是否传指针,核心看两点:是否要修改原值,以及值的大小是否值得避免拷贝。Go 默认传值,但结构体、切片、map、func、channel 本身已是引用类型(内部含指针),它们的“传值”只是复制头信息。
func increment(p *int) { *p++ }
type Point struct{ X, Y int })→ 传值更高效,且更利于逃逸分析优化*T;若只读 → T 或 *T 都可,但统一用 *T 更常见(避免混用)别迷信“所有结构体都要用指针接收者”。过度使用指针反而
阻碍内联、增加 GC 压力,且让 nil 接收者调用变得可能(有时是 bug)。
最典型的 panic 是 panic: runtime error: invalid memory address or nil pointer dereference,通常来自忘记检查 nil 就直接 * 解引用或调用方法。
func printName(p *string) {
fmt.Println(*p) // 如果 p == nil,这里 panic
}
// 正确做法:
if p != nil {
fmt.Println(*p)
}
另一个隐性坑是:多个变量指向同一块内存,修改一处影响全局。比如把结构体指针存进 map 或 slice 后反复复用,容易导致意料外的状态污染。调试时注意用 fmt.Printf("%p", p) 打印地址确认是否真共享。
指针真正的复杂点不在语法,而在生命周期和所有权意图——它把“谁负责初始化、谁负责释放(虽然 Go 有 GC)、谁有权修改”这些契约,明明白白写进了类型签名里。
# go
# golang
# golang指针
# red
# Error
# printf
# 局部变量
# 结构体
# int
# 指针
# 引用类型
# 指针类型
# Struct
# var
# pointer
# 切片
# nil
# map
# channel
# bug
# 报错
# 的是
# 这是
# 原值
# 多个
# 什么时候
# 已有
# 而在
# 适用于
# 进了
相关文章:
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
网站制作新手教程,新手建设一个网站需要注意些什么?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
建站之家VIP精选网站模板与SEO优化教程整合指南
广东企业建站网站优化与SEO营销核心策略指南
建站之星安装步骤有哪些常见问题?
建站三合一如何选?哪家性价比更高?
,想在网上投简历,哪几个网站比较好?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何在阿里云购买域名并搭建网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何用腾讯建站主机快速创建免费网站?
Swift中循环语句中的转移语句 break 和 continue
建站中国官网:模板定制+SEO优化+建站流程一站式指南
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
已有域名能否直接搭建网站?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何选择美橙互联多站合一建站方案?
韩国服务器如何优化跨境访问实现高效连接?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
,柠檬视频怎样兑换vip?
想学网站制作怎么学,建立一个网站要花费多少?
,如何利用word制作宣传手册?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
安徽网站建设与外贸建站服务专业定制方案
如何快速生成可下载的建站源码工具?
网站制作网站,深圳做网站哪家比较好?
深圳网站制作的公司有哪些,dido官方网站?
香港服务器租用费用高吗?如何避免常见误区?
如何登录建站主机?访问步骤全解析
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何在搬瓦工VPS快速搭建网站?
红河网站制作公司,红河事业单位身份证如何上传?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
内部网站制作流程,如何建立公司内部网站?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
建站之星各版本价格是多少?
广州美橙建站如何快速搭建多端合一网站?
如何零基础在云服务器搭建WordPress站点?
如何快速搭建响应式可视化网站?
开源网站制作软件,开源网站什么意思?
建站之星如何保障用户数据免受黑客入侵?
*请认真填写需求信息,我们会在24小时内与您取得联系。