type Human struct {
Name string
}
func (t *Human) GetInfo() {
fmt.Println(t.Name)
}
func main() {
var p1 interface{}
p1 = Human{Name:"John"}
//p1.GetInfo()
}
Run Code Online (Sandbox Code Playgroud)
现在,p1的典型是接口{},但我想得到一个Human对象.
怎么做?我可以调用p1.GetInfo()
Jam*_*dge 12
您可以使用类型断言来解包存储在接口变量中的值.从您的示例中,p1.(Human)将从Human变量中提取值,或者如果变量保持不同的类型则会发生混乱.
但是如果你的目标是调用接口变量中保存的方法,你可能不想使用普通interface{}变量.而是声明您想要的接口类型的方法.例如:
type GetInfoer interface {
GetInfo()
}
func main() {
var p1 GetInfoer
p1 = &Human{Name:"John"}
p1.GetInfo()
}
Run Code Online (Sandbox Code Playgroud)
然后,Go将确保只为GetInfo方法赋值p1,并确保方法调用调用适合存储在变量中的类型的方法.不再需要使用类型断言,代码将与实现接口的任何值一起使用.
你可以在内联做一个类型断言:
p1.(*Human).GetAll()
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/ldtVrPnZ79
或者,您可以创建一个新变量来保存Human类型.
| 归档时间: |
|
| 查看次数: |
9239 次 |
| 最近记录: |