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  }