代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。