登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-19 17:50:48 391浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《如何将 Go 字符串文字代码转换为其值?》,聊聊golang,我们一起来看看吧!

问题内容

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

我找到了回答如何进行反向转换的问题 - 从字符串到它所代表的 go 代码:[golang:给定一个字符串,输出一个等效的 golang 字符串文字](https://stackoverflow.com/questions/17779371/golang-given-a-string- output-an-equivalent-golang-string-literal)

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

正确答案

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

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

例子:

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 
Hi! 
First line
Secondline 

终于介绍完啦!小伙伴们,这篇关于《如何将 Go 字符串文字代码转换为其值?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表