func main() {
log.Println(resolveFormula([]interface{}{"1", "+", []string{"3", "*", "1"}, "*", 1}))
}
func resolveFormula(i interface{}) (string, error) {
rv := reflect.ValueOf(i)
switch rv.Kind() {
case reflect.Slice:
str := "("
for n := 0; n < rv.Len(); n++ {
a, err := resolveFormula(rv.Index(n).Interface())
if err != nil {
return "", err
}
str += a
}
str += ")"
return str, nil
case reflect.String:
return i.(string), nil
default: //根据条件解析公式
if data, err := json.Marshal(i); err != nil {
return "", err
} else {
var cond interface{}
if err := json.Unmarshal(data, &cond); err != nil {
}
if value, err := calc(cond); err != nil {
return "", err
} else {
return fmt.Sprintf("%.2f", value), nil
}
}
}
}
func calc(cond interface{}) (float64, error) {
return 11.11, nil
}
网友评论