編寫go應用程序輸出有效的go代碼可能是使用內置的「go」包和它的一些子包(「go/ast」, 「去/令牌」,「去/打印機」等)。golang:給出一個字符串,輸出一個等效的golang字符串
創建一個字符串字面表達,你需要創建一個ast.BasicLit:
l := &ast.BasicLit{Kind: token.STRING, Value: "\"Hello world!\""}
在我的圍棋程序,我有一個字符串,我需要創建一個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!"
雖然我的具體問題方面的字符串,我很想在一個通用的解決方案,其將在任何類型的工作值(整數類型,float類型,即使是複雜的類型),如下所示:
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
我已經看了很多通過標準庫文檔,但還沒有真正發現任何東西看起來接近我正在尋找。希望你們可以幫助我。
在此先感謝!
完美!正是我在找什麼!非常感謝! – AntiMS