鍵入斷言

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