为什么 Go split by newline separator 需要在作为参数接收时进行转义

package main


import (

    "fmt"

    "os"

    "strings"

)


func main() {

    arguments := os.Args


    words := strings.Split(arguments[1], "\n")


    fmt.Println(words)

    fmt.Println(words[0])

}

例子:


go run main.go "hello\nthere"

输出:


[hello\nthere]

hello\nthere

预期的:


[hello there]

hello

为什么"\n"需要对换行符的分隔符进行转义"\\n"以获得预期结果?


因为如果像这样使用https://play.golang.org/p/UlRISkVa8_t,您不需要转义换行符



一只名叫tom的猫
浏览 110回答 2
2回答

慕运维8079593

您假设 Go 将您的输入视为:"hello\nthere"但它确实将您的输入视为:`hello\nthere`因此,如果您希望将该输入识别为换行符,则需要取消引用它。但这是一个问题,因为它也没有引号。因此,您需要添加引号,然后将其删除,然后才能继续您的程序:package mainimport (   "fmt"   "strconv")func unquote(s string) (string, error) {   return strconv.Unquote(`"` + s + `"`)}func main() {   s, err := unquote(`hello\nthere`)   if err != nil {      panic(err)   }   fmt.Println(s)}结果:hellothere

素胚勾勒不出你

您可以尝试传递类似ANSI C 的字符串go run main.go $'hello\nthere'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go