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 】
相关推荐:
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
MAC如何设置网卡MAC地址克隆_MAC终端修改物理地址与环境模拟【教程】
PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
Win11怎么开启游戏模式_Win11优化游戏帧数性能【教程】
如何使用Golang模拟请求超时_Golang context与HTTP请求测试实践
win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Win11怎么压缩文件 Win11自带压缩解压功能使用【教程】
如何在 PHP 中按相同键合并两个关联数组为二维数组
php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】
Win11怎么忘记WiFi网络_Win11删除已保存无线连接【教程】
php内存溢出怎么排查_php内存限制调试与优化方法【说明】
Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】
Windows如何拦截2345弹窗广告_Windows拦截2345弹窗方法【步骤】
如何使用Golang log设置日志输出格式_Golang log日志格式示例
c++怎么操作redis数据库_c++ hiredis库连接与命令执行【实战】
如何使用正则表达式提取以编号开头、后接多个注解的逻辑分组块
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
Python音视频处理高级项目教程_FFmpegPydub剪辑与特效
Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】
Win11怎么设置多显示器任务栏 Win11扩展任务栏至多屏方便跨屏操作【技巧】
Win11怎么退出高对比度模式_Win11取消反色显示快捷键【修复】
Flask 表单数据通过 SMTP 发送邮件的完整实现教程
Python多线程使用规范_线程安全解析【教程】
php能跑在stm32上吗_php在stm32微控制器上的移植方法【介绍】
windows 10应用商店区域怎么改_windows 10微软商店切换地区方法
Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选
Mac如何设置动态壁纸?(让桌面动起来)
如何在同包不同文件中正确引用 Go 结构体
如何使用Golang包导出规则_控制函数和变量可见性
Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改
如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法
Go 中的 := 运算符:类型推导机制与使用边界详解
如何在Golang中实现基础配置管理功能_Golang配置文件读取与更新示例
Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节
Python爬虫项目实战教程_Scrapy抓取与存储数据实例
c# await 一个已经完成的Task会发生什么
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
Win11怎么设置鼠标宏_Win11鼠标按键自定义编程教程【详解】
Win11怎么关闭定位服务 Win11禁止应用获取位置信息【隐私】
Mac如何创建和管理多个桌面空间_Mac高效多任务处理【技巧】
如何在 Go 后端安全获取并验证前端存储的 JWT?
如何从 Go 的 map[string]interface{} 中安全获取值
PHP cURL GET请求:正确设置请求头与身份认证的完整教程
如何在Golang中优化文件读写性能_使用缓冲和并发处理
MAC怎么一键隐藏桌面所有图标_MAC极简模式切换与终端指令【方法】
php485在macos下怎么配置_php485 macOS系统配置指南【解答】
Win11怎样安装搜狗输入法_Win11安装搜狗输入法教程【步骤】
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
2026-01-05
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。