Golang pongo2筛选器返回不正确的值
我创建了一个Golang pongo2筛选器返回不正确的值,go,templates,pongo2,Go,Templates,Pongo2,我创建了一个pongo2过滤器,它应该返回传入过滤器的参数的绝对值。但是,如果我将值作为参数传递,则过滤器仅返回正确答案。但是如果我直接传递值,它将返回不正确的值 我的问题是,如果我直接传递值而不是作为参数传递,为什么它不返回正确的结果 package main import ( "fmt" "math" "github.com/flosch/pongo2" "log" )
pongo2
过滤器,它应该返回传入过滤器的参数的绝对值。但是,如果我将值作为参数传递,则过滤器仅返回正确答案。但是如果我直接传递值,它将返回不正确的值
我的问题是,如果我直接传递值而不是作为参数传递,为什么它不返回正确的结果
package main
import (
"fmt"
"math"
"github.com/flosch/pongo2"
"log"
)
func init() {
pongo2.RegisterFilter("abs", func(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
if in.IsString() {
return pongo2.AsValue(math.Abs(in.Float())), nil
}
return pongo2.AsValue(math.Abs(in.Float())), nil
})
}
func correctWay() {
tpl, err := pongo2.FromString("Hello {{ val|abs }}!")
if err != nil {
log.Fatal(err)
}
// Now you can render the template with the given
// pongo2.Context how often you want to.
out, err := tpl.Execute(pongo2.Context{"val": -5})
if err != nil {
log.Fatal(err)
}
fmt.Println(out)
}
func incorrectWay() {
tpl, err := pongo2.FromString("Hello {{ -5|abs }}!")
if err != nil {
log.Fatal(err)
}
// Now you can render the template with the given
// pongo2.Context how often you want to.
out, err := tpl.Execute(pongo2.Context{})
if err != nil {
log.Fatal(err)
}
fmt.Println(out)
}
func main() {
correctWay()
incorrectWay()
}
我认为最简单的选择是将其作为字符串传递
//这是可行的:
tpl,err:=pongo2.FromString(“Hello{{'-5'|abs}!”)
//打印你好5.000000!
我做了一些实验,最初我认为这是因为Go是如何处理负号的,但我不认为是这样。我不知道pongo在做什么,我很确定如果你传入-5
,只有5
被传递给你注册的函数(将fmt.Println(in.Float())
添加到闭包中),当它被Go输出时就会被否定。这可能是一个错误