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

Shi*_*ang 3 string command-line go command-line-arguments

我尝试"\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)

有简单的解决方案吗?

icz*_*cza 5

\t是一个反斜杠转义符,表示制表符(例如在解释的字符串文字中)。如果您有反斜杠转义,您可以使用strconv.Unquote()它来“解码”它(转换为制表符)。

您必须知道的一件事:strconv.Unquote()要求其参数用引号引起来,例如您必须传递"\t"not simple \t

sep, err := strconv.Unquote(`"` + sep + `"`)
if err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

添加此内容后,运行go run main.go -sep '\t',输出为:

name    xxx
"\t"
Run Code Online (Sandbox Code Playgroud)

查看相关问题:

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

在 Go 中将 unicode 代码点转换为文字字符