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成为指针
版权归原作者 ajwlforever 所有, 如有侵权,请联系我们删除。