当我有一个返回接口类型的函数时,返回的值不会像我预期的那样工作。也就是说,它严格充当已定义的接口,要访问接口中未定义的方法和值,我必须进行类型断言。为什么?
考虑以下示例代码:
package main
import (
"fmt"
)
type Frobnicator interface {
Frobnicate()
}
type Foo struct {
Value string
}
func (f *Foo) Frobnicate() {
fmt.Printf("The value is %s\n", f.Value)
}
func fooFactory () Frobnicator {
return &Foo{"chicken"}
}
func main() {
foo := fooFactory( )
foo.Frobnicate()
// foo.Value undefined (type Frobnicator has no field or method Value)
// fmt.Printf("foo value = %s\n", foo.Value)
bar := foo.(*Foo)
fmt.Printf("bar value = %s\n", bar.Value)
}
有没有更好、更容易、更惯用的方法foo.Value
?或者类型断言真的是最好的方法吗?