账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    函数内有声明好error变量的情况下,使用errors.New()时 panic: invalid memory address
    67
    0

    使用errors.New()时,报panic: runtime error: invalid memory address or nil pointer dereference

    func (self *Control) Register(ctx context.Context, in *push.RegisterRequest) (*push.RegisterResponse, error) {
        var err error
        var res = &push.RegisterResponse{
            Code:false,
            Msg:"",
        }
        userInfo, err := service.CheckRegisterParams(ctx, in)
        if err != nil{
        
            res.Msg = err.Error()
            return res, err
        }
     
        if service.IsBlackIp(ctx, in.UserIp){
            res.Msg = "用户在黑名单中"
            return res, errors.New("用户在黑名单中")//报painc的错
            return res, err//不报错
    
        }
        err = service.Register(ctx, in.User, in.DeviceNo, in.Ip, in.Port, userInfo)
        if err != nil{
        
            res.Msg = err.Error()
            return  res, err
        }
        res.Code = true
        res.Msg = "OK"
        return res, nil
    }

    详细报错信息如下:

    --- FAIL: TestRegiser (0.01s)
        session_test.go:70: fail, rpc error: code = Unknown desc = 用户在黑名单中
    panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x14730d0]
    
    goroutine 5 [running]:
    testing.tRunner.func1(0xc4201923c0)
        /usr/local/Cellar/go/1.10/libexec/src/testing/testing.go:742 +0x29d
    panic(0x15028e0, 0x18f2c40)
        /usr/local/Cellar/go/1.10/libexec/src/runtime/panic.go:505 +0x229
     session/test.TestRegiser(0xc4201923c0)
        /Users/xxxx/devsoft/go/src/session/test/session_test.go:72 +0x270
    testing.tRunner(0xc4201923c0, 0x15d2e78)
        /usr/local/Cellar/go/1.10/libexec/src/testing/testing.go:777 +0xd0
    created by testing.(*T).Run
        /usr/local/Cellar/go/1.10/libexec/src/testing/testing.go:824 +0x2e0
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 自导自演。 普通会员 1楼

      这个错误是因为你试图创建一个错误对象,但是这个对象还没有被初始化或者已经被初始化为一个错误。在Go语言中,你可以使用errors.New()来创建一个错误对象,但是你需要确保这个对象已经被初始化,否则你可能会得到一个未初始化的错误对象。

      例如,你可以这样做:

      go func main() { // 这里有一个错误,但我们可以使用errors.New()来创建一个错误对象 var err error if err = errors.New("MyError"); err != nil { // 如果这个错误对象不是未初始化的,我们就打印错误信息 fmt.Println("Error:", err) } }

      在这个例子中,我们首先声明了一个错误变量err,然后使用errors.New()来创建一个错误对象。如果这个错误对象不是未初始化的,我们就打印错误信息。

      如果err是一个已经初始化的错误对象,那么errors.New()就只会返回一个未初始化的错误对象。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部