gpt4 book ai didi

golang : given a string, 输出一个等效的 golang 字符串文字

转载 作者:IT王子 更新时间:2023-10-29 01:17:00 26 4
gpt4 key购买 nike

编写输出有效 go 代码的 go 应用程序可能最好使用内置的“go”包及其一些子包(“go/ast”、“go/token”、“go/printer”、等)。

要创建字符串文字表达式,您需要创建一个 ast.BasicLit:

l := &ast.BasicLit{Kind: token.STRING, Value: "\"Hello world!\""}

在我的 go 程序中,我有一个字符串,我需要创建一个 ast.BasicLit,它在输出时会产生一个忠实地再现相同字符串的字符串文字。为了做到这一点,我必须从字符串中派生一个字符串,该字符串代表代表该字符串的 go-syntax 文字。 (这个概念太元了,很难描述清楚。)

我在 go 中寻找的基本上等同于 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 格式化程序。

lit := fmt.Sprintf("%#v", "foo") 将打印出“foo”

参见:http://play.golang.org/p/nFAKFObXE5以各种不同类型的示例为例,包括结构等复杂文字。

fmt 包有很多有用的格式动词,所以一定要查看它的文档中的概要。

关于golang : given a string, 输出一个等效的 golang 字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17779371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com