Skip to content

Instantly share code, notes, and snippets.

@gosom
Last active November 19, 2022 07:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gosom/30a7143de61368295a4bfc6eae413ce3 to your computer and use it in GitHub Desktop.
Save gosom/30a7143de61368295a4bfc6eae413ce3 to your computer and use it in GitHub Desktop.
error interface behavior
package main
import "fmt"
type MyError struct {
}
func (e MyError) Error() string {
return "error happened"
}
func doSomething1(v bool) error {
if !v {
var err MyError
return err
}
return nil
}
func doSomething2(v bool) error {
var err *MyError
if !v {
err = &MyError{}
return err
}
return err
}
func main() {
fmt.Println("Running doSomething1(true)")
if err := doSomething1(true); err != nil {
fmt.Printf("\terror: %v %T\n", err, err)
} else {
fmt.Printf("\tno error: %v %T\n", err, err)
}
fmt.Println("Running doSomething1(false)")
if err := doSomething1(false); err != nil {
fmt.Printf("\terror: %v %T\n", err, err)
} else {
fmt.Printf("\tno error: %v %T\n", err, err)
}
fmt.Println("Running doSomething2(true)")
if err := doSomething2(true); err != nil {
fmt.Printf("\terror: %v %T\n", err, err)
} else {
fmt.Printf("\tno error: %v %T\n", err, err)
}
fmt.Println("Running doSomething2(false)")
if err := doSomething2(false); err != nil {
fmt.Printf("\terror: %v %T\n", err, err)
} else {
fmt.Printf("\tno error: %v %T\n", err, err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment