invalid memory address or nil pointer dereference报错
这个错误一般出现在使用GO指针的情况下,在运行程序时会报
panic: runtime error: invalid memory address or nil pointer dereference这个错误日志,这个其实是典型的GO指针声明之后没有对指针线初始化而直接赋值导致的错误。
我遇到这个报错的情况是在kitex的handler中这个形式的方法中
func (s *DouyinVideoImpl) Publish(ctx context.Context, req *video.DouyinPublishActionReq) (resp *video.DouyinPublishActionResp, err error)
在这个方法中有两个参数作为返回值,并且在go语言的语法糖中定义了变量名的参数实际上等于在方法中添加了
var resp xxxx(类型)这段代码。因此其在go语言中并没有进行初始化操作,如果直接用resp.xxx = xxx就会发生invalid memory address or nil pointer dereference这个错误导致程序panic。
因此最直接的办法就是用new()方法初始化值的内存地址,预先分配一个内存地址到指针
resp=new(xxx)
。或者直接使用resp = &xxx{}来进行简单的初始化和内存分配。
所以总结一下,这里涉及到三个名词概念:指针地址,指针,指针指向的值。指针地址存放指针,指针指向值所在的地址,而就是因为我们没有完成前面这步导致无法指向值,才导致这个错误的发生。因此在赋值之前一定要先初始化指针!