String 是否仍然可以在Go中创建以null结尾的字符串?

String 是否仍然可以在Go中创建以null结尾的字符串?,string,go,c-strings,String,Go,C Strings,是否仍然可以在Go中创建以null结尾的字符串 我目前正在尝试的是a:=“golang\0”,但它显示了编译错误: non-octal character in escape sequence: " 引号之间的文本构成文本的值,反斜杠转义按其所在位置进行解释(除非\'是非法的,\“是合法的),具有相同的限制。三位八进制(\nnn)和两位十六进制(\xnn)转义符表示结果字符串的单个字节;所有其他转义符表示单个字符的(可能是多字节)UTF-8编码 因此\0是非法序列,必须使用3个八进制数字:

是否仍然可以在Go中创建以null结尾的
字符串

我目前正在尝试的是
a:=“golang\0”
,但它显示了编译错误:

non-octal character in escape sequence: "

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

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

s := "golang\000"
或使用十六进制代码(2个十六进制数字):

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

例如:

s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s)  // prints "hello\x00"
输出:全部以0代码字节结束(在上尝试)


另一个选项是
ByteSliceFromString
函数:

package main

import (
   "fmt"
   "golang.org/x/sys/windows"
)

func main() {
   b, e := windows.ByteSliceFromString("golang")
   if e != nil {
      panic(e)
   }
   fmt.Printf("%q\n", string(b)) // "golang\x00"
}

@icza介绍了如何使用null终止符编写字符串文字。使用此代码可将null添加到字符串变量的末尾:

 s += string(rune(0))
例如:

s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s)  // prints "hello\x00"

如果需要,请使用
0
指令完成您的工作。请参阅:.NUL在字符串中转义为
\x00
。此外,该语言不提供以NUL结尾的字符串,因此..是的,您必须修改每个字符串。
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s)  // prints "hello\x00"