Skip to content

Instantly share code, notes, and snippets.

@tokubass
Last active November 11, 2018 16:31
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 tokubass/a96f53fba66f724dde1ed2139f7ef1b7 to your computer and use it in GitHub Desktop.
Save tokubass/a96f53fba66f724dde1ed2139f7ef1b7 to your computer and use it in GitHub Desktop.
golangのエラー型
package main
import (
"fmt"
)
type MyErr struct {}
func (e MyErr) Error() string {
return fmt.Sprint("error")
}
func main() {
{
var err interface{}
if err == nil {
fmt.Println("interface\t is nil")
}
}
{
var err error
if err == nil {
fmt.Println("error type\t is nil")
}
}
{
var err *MyErr
if err == nil {
fmt.Println("MyErr pointer\t is nil")
}
}
{
var err MyErr
_ = err
//cannot convert nil to type MyErr
//if err == nil {
// fmt.Println("MyErr is nil")
//}
}
{
var my *MyErr
var err error
err = my
if err != nil {
fmt.Println("error\t is not nil")
switch err := err.(type) {
case *MyErr:
_ = err
fmt.Println(" *MyErr")
}
}
}
{
var my MyErr
var err error
err = my
if err != nil {
fmt.Println("error\t is not nil")
switch err := err.(type) {
case MyErr:
_ = err
fmt.Println(" MyErr")
}
}
}
}
@tokubass
Copy link
Author

interface	 is nil
error type	 is nil
MyErr pointer	 is nil
error	 is not nil
  *MyErr
error	 is not nil
  MyErr

@tokubass
Copy link
Author

error interfaceに何か代入した時点で nilではない。

 var my *MyErr
 fmt.Println(my == nil) //true
 var err error
 err = my
 fmt.Println(err == nil) //false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment