猿问

将reflect.Value从字符串转换为int

我收到这样的错误


reflect.Value.Convert: value of type string cannot be converted to type int

goroutine 6

当我运行此代码时


param := "1" // type string

ps := fn.In(i) // type int


if !reflect.TypeOf(param).ConvertibleTo(ps) {

    fmt.Print("Could not convert parameter.\n") // this is printed

}

convertedParam := reflect.ValueOf(param).Convert(ps)

我可以在不创建 switch/case 和多行代码以转换为每种类型的情况下以某种方式执行此操作吗?我只是在寻找最简单/最好的方法来做到这一点。


蛊毒传说
浏览 460回答 2
2回答

呼啦一阵风

类型转换有特定的规则。字符串不能转换为数值。使用该strconv包从字符串中读取数值。

白猪掌柜的

您可以通过反射值循环使用 switch,这将返回reflect.Value kind() 以返回该值的确切类型v := reflect.ValueOf(s interface{})for t := 0; i < v.NumField(); i++ {fmt.Println(v.Field(i)) // it will prints the value at index in interfaceswitch t := v.Kind() {&nbsp; &nbsp; case bool:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("boolean %t\n", t) // t has type bool&nbsp; &nbsp; case int:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("integer %d\n", t) // t has type int&nbsp; &nbsp; case *bool:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool&nbsp; &nbsp; case *int:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("pointer to integer %d\n", *t) // t has type *int&nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has&nbsp; &nbsp; }}要将接口中的类型转换为另一种类型,首先在变量中获取它的值,然后使用类型转换来转换该值
随时随地看视频慕课网APP

相关分类

Go
我要回答