gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:34:44 25 4
gpt4 key购买 nike

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com