Как читать "\ t" как вкладку в golang - PullRequest
0 голосов
/ 28 января 2020

Я попытался проанализировать "\t" из оболочки как 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"

Есть ли простое решение?

1 Ответ

2 голосов
/ 28 января 2020

\t - это экранированная обратная косая черта sh, которая обозначает символ табуляции (например, в интерпретируемых строковых литералах). Если у вас есть экранирование backsla sh, вы можете использовать strconv.Unquote() для его «декодирования» (в символ табуляции).

Одна вещь, которую вы должны знать: strconv.Unquote() требует его аргумент должен быть в кавычках, например, вы должны передать "\t", а не просто \t.

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

С этим дополнением, запустив go run main.go -sep '\t', вы получите:

name    xxx
"\t"

См. Похожие вопросы:

Как преобразовать Go строковый литеральный код в его значение?

Преобразовать кодовую точку Unicode в литеральный символ в Go

...