Go指针初始化
2023-12-29 06:45:48
    		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成为指针
    			文章来源:https://blog.csdn.net/qq_40893490/article/details/135280740
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!