无论如何在Go中创建空终止字符串?

Yas*_*ava 10 string c-strings go

无论如何string在Go中创建null终止?

我目前正在尝试a:="golang\0"但它显示编译错误:

non-octal character in escape sequence: "
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 29

规范:字符串文字:

引号之间的文本形成文字的值,反斜杠转义符被解释为符文文字(除非\'是非法且\"合法),具有相同的限制.三位八进制(\nnn)和两位十六进制(\xnn)转义表示结果字符串的各个字节; 所有其他转义表示单个字符的(可能是多字节)UTF-8编码.

所以\0是非法序列,你必须使用3个八进制数字:

s := "golang\000"
Run Code Online (Sandbox Code Playgroud)

或使用十六进制代码(2个十六进制数字):

s := "golang\x00"
Run Code Online (Sandbox Code Playgroud)

或者是unicode序列(4个十六进制数字):

s := "golang\u0000"
Run Code Online (Sandbox Code Playgroud)

例:

s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))
Run Code Online (Sandbox Code Playgroud)

输出:所有以0码字节结束(在Go Playground上尝试).

[103 111 108 97 110 103 0]
[103 111 108 97 110 103 0]
[103 111 108 97 110 103 0]
Run Code Online (Sandbox Code Playgroud)