[gogf/gf]因为go程中的某个错误导致整个进程意外退出

2024-06-25 700 views
4

下面是报错: 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=0x9cbf96]

goroutine 11583268 [running]: github.com/gogf/gf/os/gtimer.(Entry).Run.func1.1() C:/Users/Administrator/go/pkg/mod/github.com/gogf/gf@v1.16.6/os/gtimer/gtimer_entry.go:47 +0x97 panic({0xa58380, 0x110ce40}) C:/Program Files/Go/src/runtime/panic.go:1038 +0x215 XXX/app/model.(Goods).Test(0xc000235dd0) C:/XXX/app/model/test.go:174 +0xeb6 github.com/gogf/gf/os/gtimer.(Entry).Run.func1() C:/Users/Administrator/go/pkg/mod/github.com/gogf/gf@v1.16.6/os/gtimer/gtimer_entry.go:57 +0x57 created by github.com/gogf/gf/os/gtimer.(Entry).Run C:/Users/Administrator/go/pkg/mod/github.com/gogf/gf@v1.16.6/os/gtimer/gtimer_entry.go:43 +0x87

这个是测试代码

func test(){
    var i *int
    k := *i
    if k == 1 {
        log.Println("hello")
    }
}

回答

8

类似gin处理这种错误就不是退出整个进程,而是报个500错误,如果加入这种错误处理方式就更完美了

1

web是有这方面的处理的

8

我看你用了gtimer,这块应该自己处理的。

// Test_Timer description
//
// createTime: 2022-07-18 11:46:59
//
// author: hailaz
func Test_Timer(t *testing.T) {
    gtimer.Add(time.Second, func() {
        defer func() {
            if err := recover(); err != nil {
                t.Error(err)
                // 终止定时任务不在执行
                gtimer.Exit()
            }
        }()
        panic(123)
    })

    time.Sleep(time.Second * 5)
}
1

是的使用了gtimer,非常感谢,解决了困扰我很久的问题!