Go指针初始化

复制代码
var post *models.Post
res := postDao.SavePost(post)
复制代码
var post models.Post
res := postDao.SavePost(&post)

在1中将models.Pos声明为指针但是并没有为其分配内存空间,这意味着它的值为 nil,并且没有指向有效的 models.Post 对象。

复制代码
func Test1(t *testing.T) {
	var post *models.Post
	
	post.Id = 1
	fmt.Printf("%v", post)
}

这样访问就会出错:

复制代码
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference

第二种写法 var post models.Post 声明了一个直接的 models.Post 类型的变量,并为其分配了内存空间。然后,将 &post 作为参数传递给 SavePost 方法,将 post 变量的地址传递给了方法。

这样,SavePost 方法在使用 post 时可以访问到有效的内存空间,而不会导致内存错误。

如果想用第一种让post是一个指针变量并且有空间,应该这样写

复制代码
post := &models.Post{}
res := postDao.SavePost(post)

models.Post{}创建了一个新的对象,这个对象在内存空间,&将地址赋予给post,post成为指针

相关推荐
微学AI8 小时前
内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战
开发语言·php
LucianaiB8 小时前
遇到 Seed Evolving,我终于把脑海里的小说世界图谱做出来了:《斗破苍穹》篇
后端
峥嵘life8 小时前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
BerryS3N8 小时前
深度解析:从零构建生产级大模型 RAG(检索增强生成)系统全栈指南
开发语言·python·ai
今儿敲了吗8 小时前
Python——函数基础
开发语言·笔记·python
CHANG_THE_WORLD8 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
kels88999 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
JuiceFS9 小时前
GPFS、Alluxio、JuiceFS 怎么选?一文看懂架构与适用场景
人工智能·后端
microrain9 小时前
从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈
物联网·golang·开源·sagooiot
武子康9 小时前
1.2GB 离线语音 Agent 真正值得复用的不是 908ms:四阶段职责 + 状态感知 Tool Schema + 可观测时间锚点
人工智能·后端·agent