Posts

Showing posts with the label panic

What is the difference between 2 code blocks

package main import ( "fmt" "github.com/sirupsen/logrus" "runtime/debug" "time" ) func main () { defer func () { if err := recover (); err != nil { logrus . Errorln ( "main" , err ) debug . PrintStack () } }() GoInside ( nil ) time . Sleep ( 2 * time . Second ) fmt . Println ( "After panic" ) } type Test struct { X int } func GoInside ( v * Test ) { go NullPointer ( v . X ) } func NullPointer ( X int ) { fmt . Println ( X ) } This above code can handle a panic error , but the code below can not handle a panic ==> why  package main import ( "fmt" "github.com/sirupsen/logrus" "runtime/debug" "time" ) func main () { defer func () { if err := recover (); err != nil { logrus . Errorln ( "main" , err ) debug . PrintStack () } }() GoInside () time . Sleep ( 2 * ti...

How to handle panic error in Golang

ref:  https://ednsquare.com/story/learn-go-panic-and-recover-in-golang------1HSVNg func main () { NullPointer ( nil ) time . Sleep ( 2 * time . Second ) fmt . Println ( "After panic" ) } type Test struct { X int } func NullPointer ( v * Test ) { fmt . Println ( v . X ) } Đoạn code trên dễ dàng gây ra lỗi panic và stop hàm main panic: runtime error: invalid memory address or nil pointer dereference Vậy chúng ta cần làm gì để tránh gây chết hàm main đây Nếu là java hoặc ngôn ngữ khác thì chúng ta đã có try catch finally  Còn trong golang bạn sẽ có một cách trông đẹp mắt hơn func main () { defer func () { if err := recover (); err != nil { logrus . Errorln ( err ) debug . PrintStack () } }() NullPointer ( nil ) time . Sleep ( 2 * time . Second ) fmt . Println ( "After panic" ) } type Test struct { X int } func NullPointer ( v * Test ) { fmt . Println ( v . X ) } Theo cách này thì trong hàm main chúng ta ...