我正在尝试理解 golang 接口,我的问题是为什么 err2.What 未定义。
这是一个简单的代码。输出表明 err 和 err2 与 *main.MyError 具有相同的类型,但 err2 没有字段“What”,因此 err 和 err2 之间肯定存在一些差异,但我无法在这里弄清楚差异。我刚开始学习golang不久,任何帮助将不胜感激。
package main
import (
"fmt"
"time"
"reflect"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s",
e.When, e.What)
}
func run() error {
return &MyError{
time.Now(),
"it didn't work",
}
}
func main() {
err := &MyError{time.Now(), "Hello"}
fmt.Println(reflect.TypeOf(err))
fmt.Println(err.What)
err2 := run()
fmt.Println(reflect.TypeOf(err2))
fmt.Println(err2.What)
}
预期输出:
main.MyError
Hello
main.MyError
it didn't work
实际输出:
\# command-line-arguments
./test.go:34:18: err2.What undefined (type error has no field or method What)