我需要在Go中将地图对象的字符串表示形式转换为实际的地图对象。 Python通过ast.literal_eval()并在Go中寻找类似的东西来提供此功能。
我已经检查了Go的ast lib https://golang.org/pkg/go/ast,但找不到相似的功能。也是第三方lib https://github.com/apaxa-go/eval,它通过自述文件中的示例代码“出现”以支持此操作(尽管并非特定于地图):
src:="int8(1*(1+2))"
expr,err:=ParseString(src,"")
if err!=nil{
return err
}
r,err:=expr.EvalToInterface(nil)
if err!=nil{
return err
}
fmt.Printf("%v %T", r, r) // "3 int8"
但是在尝试地图时:
myMap := "map[blah:1 stuff:2 list:3]"
expr, err := eval.ParseString(myMap, "")
if err != nil{
log.Fatal("%v", err)
}
log.Printf("%v %T", expr, expr)
result, err := expr.EvalToInterface(nil)
if err != nil{
log.Fatal("%v", err)
}
log.Printf("%v %T", result, result)
我收到以下错误消息:
2019/10/27 18:38:27.242352 main.go:33: %vexpression:1:9: expected ']', found ':'
第33行是表达式:
expr, err := eval.ParseString(myMap, "")
我刚开始使用Go,所以我可能会从错误的方向进行操作。任何帮助,将不胜感激。最终目标是采用地图的这种字符串表示形式并将其转换为JSON。
答案 0 :(得分:0)
myMap
中的地图表示错误。你应该这样写
map[string]int{"foo": 1, "bar": 2}