键入断言
你可以使用 Type Assertion 访问接口的实际数据类型。
interfaceVariable.(DataType)
实现接口 Subber
的 struct MyType
示例:
package main
import (
"fmt"
)
type Subber interface {
Sub(a, b int) int
}
type MyType struct {
Msg string
}
//Implement method Sub(a,b int) int
func (m *MyType) Sub(a, b int) int {
m.Msg = "SUB!!!"
return a - b;
}
func main() {
var interfaceVar Subber = &MyType{}
fmt.Println(interfaceVar.Sub(6,5))
fmt.Println(interfaceVar.(*MyType).Msg)
}
如果没有 .(*MyType)
,我们将无法访问 Msg
Field。如果我们尝试 interfaceVar.Msg
,它将显示编译错误:
interfaceVar.Msg undefined (type Subber has no field or method Msg)