为了账号安全,请及时绑定邮箱和手机立即绑定

golang:给定一个字符串,输出一个等效的 golang 字符串文字

golang:给定一个字符串,输出一个等效的 golang 字符串文字

Go
明月笑刀无情 2021-06-09 18:21:30
编写输出有效 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 mainimport (    "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 mainimport (    "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))}这个程序应该输出:51.0+1.0i我已经浏览了很多标准库文档,但还没有真正找到与我正在寻找的内容相近的东西。希望各位大侠能帮帮我。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信