string - Go - 比较用户输入的字符串/字节 slice

标签 string input go compare byte

我正在从用户那里获取输入,但是当我稍后尝试将其与字符串文字进行比较时,它不起作用。不过,这只是一个测试。

我想对其进行设置,以便在输入空白行时(只需按下回车/返回键)程序退出。我不明白为什么字符串不进行比较,因为当我打印它时,结果是一样的。

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。

[1] Comparison of Go data types for string processing.

关于string - Go - 比较用户输入的字符串/字节 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971672/

相关文章:

c - 当你给一个 C 标准函数一个空字符串时会发生什么?

javascript - 防止按键事件中输入字段出现空格

go - 一段时间后停止协程

Golang 使用数据进行 GET 请求

java - 在java中一次搜索两个字符串

python - 如何在 python 3 中删除字符串中的最后一个字符

java - Java中如何检查字符串的名称是否与整数的名称相同?

Javascript 输入字段值

javascript - 将日期选择器的值传递给函数

go - 在golang中是否有类似于sql.NullJson的东西?