键入断言

你可以使用 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)