0


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


本文转载自: https://blog.csdn.net/qq_40893490/article/details/135280740
版权归原作者 ajwlforever 所有, 如有侵权,请联系我们删除。

“Go指针初始化”的评论:

还没有评论