鍵入斷言
你可以使用 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)