我正在从用户那里获取输入,但是当我稍后尝试将其与字符串文字进行比较时,它不起作用。不过,这只是一个测试。
我想对其进行设置,以便在输入空白行时(只需按下回车/返回键)程序退出。我不明白为什么字符串不进行比较,因为当我打印它时,结果是一样的。
in := bufio.NewReader(os.Stdin);
input, err := in.ReadBytes('\n');
if err != nil {
fmt.Println("Error: ", err)
}
if string(input) == "example" {
os.Exit(0)
}
最佳答案
字符串与[]字节
string定义:
string
is the set of all strings of 8-bit bytes, conventionally but not necessarily representing UTF-8-encoded text. A string may be empty, but not nil. Values of string type are immutable.
byte定义:
byte is an alias for uint8 and is equivalent to uint8 in all ways. It is used, by convention, to distinguish byte values from 8-bit unsigned integer values.
这是什么意思?
[]byte
是一个byte
slice 。 slice 可以为空。string
元素是 unicode 字符,可以有超过 1 个字节。string
元素保留数据的意义(编码),[]bytes
不是。- 相等运算符是为
string
类型定义的,但不是为slice
类型定义的。
如您所见,它们是具有不同属性的两种不同类型。 有一篇很棒的博文解释了不同的字符串相关类型 [1]
关于您在代码段中遇到的问题。
请记住,in.ReadBytes(char)
返回包含 char
的字节 slice 。所以在你的代码中 input
以 '\n' 结尾。如果您希望您的代码以所需的方式工作,请尝试以下操作:
if string(input) == "example\n" { // or "example\r\n" when on windows
os.Exit(0)
}
还要确保您的终端代码页与您的 .go 源文件相同。注意不同的结束行样式(Windows 使用“\r\n”),标准 go 编译器在内部使用 utf8。
关于string - Go - 比较用户输入的字符串/字节 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971672/