使用函数类型变量进行类型断言
此问题旨在了解如何通过将类型变量传递到函数中来执行类型断言。目标是实现如下所示的目标:
// 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中文网其他相关文章!