首頁 > 後端開發 > Golang > 主體

如何在 Go 中使用函數類型變數執行類型斷言?

DDD
發布: 2024-11-02 18:04:28
原創
868 人瀏覽過

How to Perform Type Assertion with Function Type Variables in Go?

使用函數類型變數進行類型斷言

此問題旨在了解如何透過將類型變數傳遞到函數中來執行類型斷言。目標是實現如下所示的目標:

// Pseudocode
func myfunction(mystring string, mytype Type) {
    ...

    someInterface := translate(mystring)
    object, ok := someInterface.(mytype)

    ...  // Do other stuff
}

func main() {
    // Desired function call
    myfunction("hello world", map[string]string)
}
登入後複製

類型斷言的正確函數聲明

為了在給定函數中執行類型斷言,正確的函數聲明應該使用interface{}作為類型參數。這是因為 Go 中的介面可以保存任何類型值。以下是函數宣告的修正版本:

func myfunction(v interface{}, expectedType interface{}) bool {
    return reflect.TypeOf(v) == reflect.TypeOf(expectedType)
}
登入後複製

主函式中的使用

在主函式中,可以透過傳入範例來呼叫myfunction所需型別類型的值而不是型別本身:

assertNoMatch := myfunction("hello world", map[string]string{})

assertMatch := myfunction("hello world", "stringSample")

fmt.Printf("%+v\n", assertNoMatch)  // false
fmt.Printf("%+v\n", assertMatch)  // true
登入後複製

方法解釋

該方法使用反射包來比較實際值的類型(v ) 和預期類型(expectedType)的樣本值。這允許我們執行動態類型檢查,就像我們使用 switch 語句來檢查 mystring 的類型並將其明確轉換為所需類型一樣。

以上是如何在 Go 中使用函數類型變數執行類型斷言?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!