Go中指针变量默认初始化为nil,需用&取地址或new()分配内存才能安全使用;禁止对字面量取地址;解引用nil指针会panic。
Go 中不能直接声明未初始化的指针变量为 nil 以外的值,所有指针变量默认初始值都是 nil。要让它指向有效内存,必须用取地址符 & 显式获取某个变量的地址,或者用 new() 分配零值内存。
var p *int → p 是 *int 类型,值为 nil,此时解引用会 panicvar x int = 42; p := &x → 安全:p 指向栈上变量 x
p := new(int) → 返回指向新分配的零值 int 的指针(等价于 new(int) == &zero_int)Go 禁止对临时值(如字面量、函数返回值)取地址,因为它们没有确定的内存生命周期。比如 &42 或 &(x + y) 都会编译报错:cannot take the address of ...。
p := &42 → 编译失败val := 42; p := &val
new() 替代:p := new(int); *p = 42
两者都返回指针,但语义和内存位置不同:&x 指向已有变量(可能在栈或逃逸到堆),new(T) 总是在堆上分配零值 T 并返回其地址。
func example() {
// &x:x 可能被优化到栈上(除非逃逸)
x := 100
p1 := &x
// new(int):明确在堆分配,返回 *int 指向零值(即 0)
p2 := new(int) // 等价于:p2 := &int(0)
fmt.Println(*p1, *p2) // 输出:100 0
}
new(T) 只能创建零值,无法指定初始内容new(T) 再赋值,或用 &T{...} 复合字面量(适用于结构体等)int、string),&T{v} 不合法,只能用变量 + & 或 new() + 赋值这是 Go 中最典型的指针错误。只要对值为 nil 的指针执行 *p 操作,运行时就 panic:invalid memory address or nil pointer dereference。
立即学习“go语言免费学习笔记(深入)”;
var p *string; fmt.Println(*p) → 直接 panicnil,尤其在函数参数或结构体字段中接收指针时type User struct { Name *string }),JSON 反序列化后该字段可能为 nil,直接 *u.Name 很危险指针本身不复杂,难的是判断“它到底有没有被正确定向”——尤其是跨函数传递、从 JSON/DB 加载、或用 new() 后忘记赋值时,容易漏掉这层检查。
# js
# json
# go
# golang
# 栈
# 区别
# 为什么
# String
# 结构体
# int
# 指针
# 堆
# Struct
# var
# pointer
# nil
# 或用
# 值为
# 的是
# 都是
# 这是
# 是在
# 尤其是
# 已有
# 适用于
# 能在
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
Win11怎么关闭自动更新 Win11永久关闭系统更新的有效方法【技巧】
Win11怎么关闭透明效果_Windows11个性化颜色关闭透明
用Python构建微服务架构实践_FastAPI与Django对比详解
Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
Win11如何更新显卡驱动 Win11检查和安装设备驱动程序【方法】
如何使用Golang写入二进制文件_Golang io Write二进制写入示例
如何使用Golang实现错误包装与传递_Golangfmt.Errorf%w使用实践
php下载安装后swoole扩展怎么安装_异步框架支持【汇总】
php增删改查报错1054怎么办_字段名错误排查修复【解答】
如何使用Golang管理跨项目依赖_Golang多模块项目依赖实践
Mac如何彻底清理浏览器缓存?(Safari与Chrome)
Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置
php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】
Linux如何安装Tomcat应用服务器_Linux环境部署与端口修改【教程】
Win11怎么关闭OneDrive同步_Win11取消自动备份文件【教程】
Python深度学习实战教程_神经网络模型构建与训练
如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例
Windows10如何更改鼠标图标_Win10鼠标属性指针浏览
c++怎么使用std::filesystem遍历文件夹_c++ 递归查找文件与权限修改【技巧】
c++如何实现一个高性能的环形队列(Ring Buffer)_c++无锁实现方法【并发】
Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】
Python对象生命周期管理_创建销毁说明【指导】
如何快速验证Golang安装是否成功_运行go version和hello world示例
如何在Golang中修改数组元素_通过指针实现原地更新
如何使用Golang处理静态文件缓存_提高页面加载速度
Mac如何解压zip和rar文件?(推荐免费工具)
Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录
Go 语言标准库为何不提供泛型 Contains 方法:设计哲学与类型系统约束
LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】
如何在Golang中使用replace替换模块_指定本地或远程路径
c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】
C++如何使用std::async进行异步编程?(future用法)
Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式
Windows10系统更新错误0x80070002_Win10自动更新失败手动修复
Mac上的iMovie如何剪辑视频?(新手入门教程)
Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】
mac怎么右键_MAC鼠标右键设置与触控板手势技巧【入门】
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】
LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现
如何在JavaScript中动态拼接PHP的base_url与jQuery变量
Python大型项目拆分策略_模块化解析【教程】
php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
php和redis连接超时怎么办_phpredis调试连接问题汇总【指南】
如何在Golang中写入XML文件_生成符合规范的XML数据
Windows笔记本无法进入睡眠模式怎么办?(电源疑难解答)
2026-01-05
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。