编写输出有效go代码的应用程序可能最好使用内置的“go”包及其一些子包(“go / ast”,“go / token”,“go / printer”等).
要创建字符串文字表达式,您需要创建ast.BasicLit:
l := &ast.BasicLit{Kind: token.STRING,Value: "\"Hello world!\""}
在我的go程序中,我有一个字符串,我需要创建一个ast.BasicLit,当输出时会生成一个忠实再现相同字符串的字符串文字.为了做到这一点,我必须从字符串派生一个字符串,该字符串代表表示字符串的go-Syntax文字. (这个概念是如此元,很难描述而没有歧义.)
我正在寻找的东西基本上相当于Python内置的repr().这是一个你可以称之为JavaScript中eval()的“反面”的操作.
一个例子应该有助于说明我在寻找什么.
package main import ( "repr" ) // Assume the operation I'm hoping to find is implemented in the package "repr" as a function called "StrLit()" with the signature "func(v string) string". func main() { println(repr.StrLit("Hello World!")) println("a") println(repr.StrLit("a")) println(repr.StrLit(repr.StrLit("a"))) println(repr.StrLit("This is a\ntest!")) println(repr.StrLit("As is\x00this!")) }
"Hello World!" a "a" "\"a\"" "This is a\ntest!" "As is\x00this!"
虽然我的具体问题涉及字符串,但我会对一般解决方案感兴趣,该解决方案可以处理任何类型的值(整数类型,浮点类型,甚至复杂类型),如下所示:
package main import ( "repr" ) // Assume this time that repr.StrLit() has the signature "func(v interface{}) string". func main() { var a int = 5 println(repr.StrLit(a)) var c complex128 = 1.0+1.0i println(repr.StrLit(c)) }
该程序应输出:
5 1.0+1.0i
我看了很多标准的库文档但是没有找到任何看起来与我正在寻找的东西相近的东西.希望你们大家可以帮助我.
提前致谢!
你想要
http://golang.org/pkg/fmt/#Sprintf与%#v格式化程序.
原文链接:https://www.f2er.com/go/186818.htmllit:= fmt.Sprintf(“%#v”,“foo”)将打印出“foo”
有关各种不同类型的示例,请参阅:http://play.golang.org/p/nFAKFObXE5,包括结构等复杂文字.
fmt包中有很多有用的格式动词,所以一定要查看它的文档中的纲要.