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成为指针

相关推荐
Aomnitrix18 分钟前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
用户60830892904730 分钟前
集合处理利器,Java中的Stream流API
java·后端
Doris_202330 分钟前
Python条件判断语句 if、elif 、else
前端·后端·python
9号达人34 分钟前
Java 14 新特性详解与实践
java·后端·面试
Doris_202335 分钟前
Python 模式匹配match case
前端·后端·python
ytadpole36 分钟前
揭秘XXL-JOB:Bean、GLUE 与脚本模式的底层奥秘
java·后端
每天回答3个问题1 小时前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
shark_chili1 小时前
计算机磁盘的奥秘:从硬件构造到操作系统管理
后端
伍哥的传说1 小时前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
这里有鱼汤1 小时前
Python量化实盘踩坑指南:分钟K线没处理好,小心直接亏钱!
后端·python·程序员