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进行投诉反馈,一经查实,立即删除!