1 Star 0 Fork 0

jackytse / tabtoy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
strtovalue.go 1.39 KB
一键复制 编辑 原始数据 按行查看 历史
package compiler
import (
"gitee.com/jackytse/tabtoy/util"
"gitee.com/jackytse/tabtoy/v3/model"
"reflect"
"strconv"
"strings"
)
func StringToValue(str string, value interface{}, tf *model.TypeDefine, symbols *model.TypeTable) error {
err, handled := util.StringToPrimitive(str, value)
if err != nil || handled {
return err
}
if tf == nil {
panic("unsupport type: " + reflect.TypeOf(value).Elem().Name())
}
if tf.IsArray() {
tValue := reflect.TypeOf(value).Elem()
vValue := reflect.Indirect(reflect.ValueOf(value))
if vValue.Kind() != reflect.Slice {
panic("require slice" + str)
}
splitedData := strings.Split(str, tf.ArraySplitter)
slice := reflect.MakeSlice(tValue, len(splitedData), len(splitedData))
for index, strValue := range splitedData {
elemElem := slice.Index(index)
err, handled = util.StringToPrimitive(strValue, elemElem.Addr().Interface())
if err != nil {
return err
}
}
vValue.Set(slice)
return nil
}
if symbols.IsEnumKind(tf.FieldType) {
enumValueStr := symbols.ResolveEnumValue(tf.FieldType, str)
if enumValueStr != "" {
enumValue, err := strconv.Atoi(enumValueStr)
if err != nil {
return err
}
vValue := reflect.Indirect(reflect.ValueOf(value))
vValue.SetInt(int64(enumValue))
}
return nil
}
// 内建类型定义与model.InitBuiltinTypes中不匹配
panic("unhandled value: " + str)
return nil
}
Go
1
https://gitee.com/jackytse/tabtoy.git
git@gitee.com:jackytse/tabtoy.git
jackytse
tabtoy
tabtoy
v0.1.0

搜索帮助