在 Go 中取得「真實」類型的介面值
Go 的 interface{} 類型是處理任何類型值的一般方法。然而,確定 interface{} 值的實際類型可能很棘手。以下是一些方法:
類型斷言:
類型斷言(如提供的範例所示)是最簡單的方法。使用 . (點)運算符,您可以嘗試將介面值轉換為特定類型。例如,如果 tmp, ok := w.(int) 嘗試將 w 轉換為 int,如果成功,則將值儲存在 tmp 中,同時將 ok 設為 true。
類型開關:
類型開關提供了更全面的方法來處理多種類型。與 switch-case 語句類似,類型開關可以檢查 interface{} 值的類型並根據類型執行不同的程式碼路徑。例如,以下程式碼片段測試myInterface 是否為int、float64 或string:
switch v := myInterface.(type) { case int: fmt.Printf("Integer: %v", v) case float64: fmt.Printf("Float64: %v", v) case string: fmt.Printf("String: %v", v) default: fmt.Printf("Unknown type") }
取得類型的字串表示形式:
取得類型的字串表示形式,使用Reflect 套件。在介面值上呼叫reflect.TypeOf(value).Name(),以字串形式取得其類型名稱。
typeName := reflect.TypeOf(w).Name()
使用型別表示轉換值:
目前,沒有直接的方法可以使用字串型別表示來轉換值。但是,外部程式庫(例如 github.com/bluele/gcache)可以透過提供將字串轉換為類型的函數來協助完成此任務。
以上是如何決定 Go `interface{}` 值的基礎類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!