使用函數類型變數進行類型斷言
此問題旨在了解如何透過將類型變數傳遞到函數中來執行類型斷言。目標是實現如下所示的目標:
// 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中文網其他相關文章!