为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蛊毒传说 2021-11-29 16:23:01
我收到这样的错误reflect.Value.Convert: value of type string cannot be converted to type intgoroutine 6当我运行此代码时param := "1" // type stringps := fn.In(i) // type intif !reflect.TypeOf(param).ConvertibleTo(ps) {    fmt.Print("Could not convert parameter.\n") // this is printed}convertedParam := reflect.ValueOf(param).Convert(ps)我可以在不创建 switch/case 和多行代码以转换为每种类型的情况下以某种方式执行此操作吗?我只是在寻找最简单/最好的方法来做到这一点。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

类型转换有特定的规则。字符串不能转换为数值。

使用该strconv包从字符串中读取数值。


查看完整回答
反对 回复 2021-11-29
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您可以通过反射值循环使用 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 interface

switch t := v.Kind() {

    case bool:

        fmt.Printf("boolean %t\n", t) // t has type bool

    case int:

        fmt.Printf("integer %d\n", t) // t has type int

    case *bool:

        fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool

    case *int:

        fmt.Printf("pointer to integer %d\n", *t) // t has type *int

    default:

        fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has

    }

}

要将接口中的类型转换为另一种类型,首先在变量中获取它的值,然后使用类型转换来转换该值


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 459 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信