github.com/epsagon/epsagon-go@v1.39.0/example/custom_error_example/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/epsagon/epsagon-go/epsagon" 8 ) 9 10 func doTask(a int, b string) (int, error) { 11 log.Printf("inside doTask: b = %s", b) 12 if a < 10 { 13 // This error with its type will be viewable in Epsagon dashboard 14 epsagon.TypeError("value must be bigger than 10", "InputError") 15 } 16 17 return a + 1, fmt.Errorf("boom") 18 } 19 20 func main() { 21 // Normal call 22 res, err := doTask(3, "world") 23 if err != nil { 24 log.Printf("First result is %d", res) 25 } else { 26 log.Printf("error was: %v", err) 27 } 28 29 // With Epsagon instrumentation 30 config := epsagon.NewTracerConfig("generic-go-wrapper", "") 31 config.Debug = true 32 response := epsagon.GoWrapper(config, doTask)(5, "hello") 33 res2 := response[0].Int() 34 errInterface := response[1].Interface() 35 if errInterface == nil { 36 log.Printf("Result was %d", res2) 37 } else { 38 err := errInterface.(error) 39 log.Printf("error was: %v", err) 40 } 41 }