gpt4 book ai didi

reflection - Golang 反射改进

转载 作者:IT王子 更新时间:2023-10-29 00:56:23 24 4
gpt4 key购买 nike

有人知道更好的方法吗?目标是将自定义字段从字符串再次转换回其 int 类型。

switch val.Kind() {
case reflect.Int:
intID, err := strconv.ParseInt(id, 10, 0)
if err != nil {
return err
}
val.Set(reflect.ValueOf(int(intID)))

case reflect.Int8:
intID, err := strconv.ParseInt(id, 10, 8)
if err != nil {
return err
}
val.Set(reflect.ValueOf(int8(intID)))

case reflect.Int16:
intID, err := strconv.ParseInt(id, 10, 16)
if err != nil {
return err
}
val.Set(reflect.ValueOf(int16(intID)))

case reflect.Int32:
intID, err := strconv.ParseInt(id, 10, 32)
if err != nil {
return err
}
val.Set(reflect.ValueOf(int32(intID)))

case reflect.Int64:
intID, err := strconv.ParseInt(id, 10, 64)
if err != nil {
return err
}
val.Set(reflect.ValueOf(intID))
}

最佳答案

您可以使用Value.SetInt/Value.SetUint:

func setId(id string, v interface{}) {
// error checking is left as an exercise
val := reflect.ValueOf(v).Elem() // this will panic if v isn't a pointer
switch val.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
idn, _ := strconv.ParseInt(id, 10, 64)
if val.OverflowInt(idn) {
// handle large values
}
val.SetInt(idn)
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
idn, _ := strconv.ParseUint(id, 10, 64)
if val.OverflowUint(idn) {
// handle large values
}
val.SetUint(idn)
}
}

playground

关于reflection - Golang 反射改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26275198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com