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

How to read "\t" as tab in golang

我试图将 "\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)
}

结果:

$ go run main.go -sep '\t'
name\txxx
"\t"

有简单的解决方法吗?

\t 是一个反斜杠转义符,表示制表符(例如,在解释的字符串文字中)。如果你有反斜杠转义,你可以使用 strconv.Unquote() 到 "decode" 它(进入制表符)。

您必须知道的一件事:strconv.Unquote() 要求其参数用引号引起来,例如你必须通过 "\t" 而不是简单地 \t.

sep, err := strconv.Unquote(`"` + sep + `"`)
if err != nil {
    panic(err)
}

加上运行go run main.go -sep '\t',输出为:

name    xxx
"\t"

查看相关问题: