minibear2333 / blog-comment

0 stars 0 forks source link

2 3 可变参数 | go语言精进之路 #17

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

2 3 可变参数 | go语言精进之路

2.3 可变参数 # 本节源码位置 https://github.com/golang-minibear2333/golang/blob/master/2.func-containers/2.3-varargs 接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解。 这次小熊给大家带来了一个函数的特性【可变参数】,作为函数专题的结束。 2.3.1 有没有发现? # 我们有时

https://golang.coding3min.com/2.func-containers/2-3-%E5%8F%AF%E5%8F%98%E5%8F%82%E6%95%B0/

Yerikshu commented 3 years ago

所以答案在哪???别撩起来就跑啊!!!!!!!!!

minibear2333 commented 3 years ago

所以答案在哪???别撩起来就跑啊!!!!!!!!!

这样可以不用管了

func convertFloat64(s interface{}) (float64,error) {
    return strconv.ParseFloat(s.(string), 64)
}
anyesss commented 2 years ago
func convertFloat64(s interface{}) (float64,error) {
    return strconv.ParseFloat(s.(string), 64)
}

使用断言会产生一个panic panic: interface conversion: interface {} is int, not string

zxd3169633 commented 1 year ago

新手提问,我传递 "2022-06-06 00:00:00"一个这样的字符串,args ...interface{}接收后自动转成了float64,怎么能让它不自动转呢

chenmingyong0423 commented 1 year ago

新手提问,我传递 "2022-06-06 00:00:00"一个这样的字符串,args ...interface{}接收后自动转成了float64,怎么能让它不自动转呢

试了下,没有你说的转 float64 类型,如果方便,完整代码提供一下。

zxd3169633 commented 1 year ago
funcs := map[string]govaluate.ExpressionFunction{
    "parseTimeUnix": func(args ...interface{}) (interface{}, error) {
        fmt.Printf("args === %+v \n", args) //这里接收时间格式的字符串会转为float64,其他格式的不会转
        var s float64 = 0
        return s, nil
    },
}

exprString := "parseTimeUnix('2022-06-06 00:00:00') < 1686153600"
expr, _ := govaluate.NewEvaluableExpressionWithFunctions(exprString, funcs)
chenmingyong0423 commented 1 year ago
funcs := map[string]govaluate.ExpressionFunction{
  "parseTimeUnix": func(args ...interface{}) (interface{}, error) {
      fmt.Printf("args === %+v \n", args) //这里接收时间格式的字符串会转为float64,其他格式的不会转
      var s float64 = 0
      return s, nil
  },
}

exprString := "parseTimeUnix('2022-06-06 00:00:00') < 1686153600"
expr, _ := govaluate.NewEvaluableExpressionWithFunctions(exprString, funcs)

不知道你用的谁的库,什么工具,但是从下面这段代码来看,你是直接定义了一个 float64 的变量,然后作为返回值返回,那肯定返回的是 float64,没看出来是哪里转了 float64,是代码不给全?

funcs := map[string]govaluate.ExpressionFunction{ "parseTimeUnix": func(args ...interface{}) (interface{}, error) { fmt.Printf("args === %+v \n", args) //这里接收时间格式的字符串会转为float64,其他格式的不会转 var s float64 = 0 return s, nil }, }