当前位置: 首页 > 面试题库 >

如何将Go字符串文字代码转换为其值?

禄源
2023-03-14
问题内容

我在Go中的语法树中走来走去,试图找到对某个特定函数的所有调用,然后获取其字符串参数(这是一个文件名,应为字符串文字,而不是其他任何标识符)。我已成功完成此操作,现在有了的ast.BasicLit节点Kind== token.STRING,但其值为Go代码,而不是应具有的字符串值。

但是我想要相反的东西-类似于eval函数(但仅适用于Go字符串文字)。


问题答案:

您可以使用strconv.Unquote()进行转换(取消引用)。

您应该注意的一件事是,strconv.Unquote()只能取消用引号引起来的字符串(例如,以引号char "或反引号char
开头和结尾```),因此,如果不在引号中,则必须手动将其附加。

例:

fmt.Println(strconv.Unquote("Hi"))       // Error: invalid syntax
fmt.Println(strconv.Unquote(`Hi`))       // Error: invalid syntax
fmt.Println(strconv.Unquote(`"Hi"`))     // Prints "Hi"
fmt.Println(strconv.Unquote(`"Hi\x21"`)) // Prints "Hi!"

// This will print 2 lines:
fmt.Println(strconv.Unquote(`"First line\nSecondline"`))

输出(在Go Playground上尝试):

 invalid syntax
 invalid syntax
Hi <nil>
Hi! <nil>
First line
Secondline <nil>


 类似资料:
  • 问题内容: 假设我有一个这样的文本文件。 有什么办法可以将其转换为此吗? 当前,我正在使用,但是当我打印数据时,我得到的是Unicode代码点而不是字符串文字。我意识到这是的正确行为,只是不想。 我的目标是用文字字符替换代码点。 问题答案: 您可以使用和函数进行转换。 您应该注意的一件事是,只能取消引用中的字符串(例如,以引号char 或反引号char 开头和结尾```),因此我们必须手动附加该字

  • 问题内容: 我想知道是否有任何方法可以将A转换为Java可编译代码。 我有一个比较表达式保存在数据库字段中。我想从数据库中检索它,然后在条件结构中对其求值。 有什么办法吗? 问题答案: 如果你使用的是Java 6,则可以尝试使用Java Compiler API。其核心是JavaCompiler类。你应该能够在内存中构造对象的源代码。 警告:由于某些奇怪的原因,我的平台上不存在JavaCompil

  • 问题内容: 我正在阅读有关python的新f字符串的 博客 ,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。 我似乎找不到任何执行此操作的字符串方法或其他函数。 从上面我的链接中的示例: 但是,如果我有琴弦怎么办?我希望能够像这样: 事实证明,我已经可以执行类似的操作并获得性能提高。即: 问题答案: f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代

  • 问题内容: 目前,我目前正在处理一些代码,其中涉及类型为var的 它具有价值,我可以像这样轻松访问: 很好,但是我希望能够使用该 函数,由于它需要type 而不是type ,因此通常会出错。 可以使用该功能的最合适的解决方案是什么,我想也许是某种转换方法? 问题答案: 您需要构造一个新的type数组才能使用: 请参阅相关的Golang常见问题解答条目:我可以将[] T转换为[]接口{}吗?

  • 问题内容: s是“ E”,但我想要的是“ 123” 请告诉我如何获得“ 123”。 在Java中,我可以这样进行: 如何在Go中输入两个字符串? 问题答案: 使用包的功能。 例如: 您可以简单地通过添加字符串或使用包的功能来连接字符串。

  • s是'E',但我要的是“123” 请告诉我怎样才能得到“123”。 在Java,我可以这样做: 我如何在Go中两个字符串?