相关疑难解决方法(0)

Go - 是否可以将原始字符串文字转换为解释的字符串文字?

在 Go 中是否可以将原始字符串文字转换为解释字符串文字?(参见语言规范

\n

我有一个原始字符串文字,但我想将使用解释字符串文字 \xe2\x80\x94 得到的内容打印到控制台,即使用转义序列格式化的文本输出。

\n

例如,打印这个原始字符串文字给出

\n
s := `\\033[1mString in bold.\\033[0m`\nprintln(s) // \\033[1mString in bold.\\033[0m\n
Run Code Online (Sandbox Code Playgroud)\n

但我想要得到同样的结果

\n
s := "\\033[1mString in bold.\\033[0m"\nprintln(s) // String in bold. (In bold)\n
Run Code Online (Sandbox Code Playgroud)\n

对于上下文,我尝试打印使用转义序列格式化的文本文件的内容

\n
f, _ := := ioutil.ReadFile("file.txt")\nprintln(string(f))\n
Run Code Online (Sandbox Code Playgroud)\n

但输出是前一种方式。

\n

string ansi-escape go

8
推荐指数
1
解决办法
8833
查看次数

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

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

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

l := &ast.BasicLit{Kind: token.STRING, Value: "\"Hello world!\""}
Run Code Online (Sandbox Code Playgroud)

在我的go程序中,我有一个字符串,我需要创建一个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!"))
}
Run Code Online (Sandbox Code Playgroud)

调用此程序时应输出以下内容:

"Hello World!"
a
"a"
"\"a\""
"This is a\ntest!"
"As is\x00this!"
Run Code Online (Sandbox Code Playgroud)

虽然我的具体问题涉及字符串,但我会对一般解决方案感兴趣,该解决方案可以处理任何类型的值(整数类型,浮点类型,甚至复杂类型),如下所示:

package main

import (
    "repr"
)

// Assume this time that …
Run Code Online (Sandbox Code Playgroud)

go

6
推荐指数
1
解决办法
2144
查看次数

如何在golang中将“\t”读取为制表符

我尝试"\t"从 shell 解析为TAB,但是,它不起作用。

这里我举一个简单的例子。

package main

import (
    "flag"
    "fmt"
)

func main() {
    var sep string
    flag.StringVar(&sep, "sep", " ", "separator")
    flag.Parse()

    fmt.Println("name" + sep + "xxx")

    // separator is quoted by golang
    fmt.Printf("%q\n", sep)
}

Run Code Online (Sandbox Code Playgroud)

结果:

$ go run main.go -sep '\t'
name\txxx
"\\t"
Run Code Online (Sandbox Code Playgroud)

有简单的解决方案吗?

string command-line go command-line-arguments

3
推荐指数
1
解决办法
1万
查看次数