error interface behavior
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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