条件公式解析

2018-12-17  本文已影响7人  funcx
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
}
上一篇下一篇

猜你喜欢

热点阅读