文字列 vs [] バイト
文字列定義:
string
8 ビット バイトのすべての文字列のセットであり、従来通りですが、必ずしも UTF-8 でエンコードされたテキストを表すとは限りません。文字列は空でも構いませんが、nil ではありません。文字列型の値は不変です。
バイト定義:
byte は uint8 のエイリアスであり、すべての点で uint8 と同等です。慣例により、バイト値を 8 ビットの符号なし整数値と区別するために使用されます。
どういう意味ですか?
[]byte
byte
スライスです。スライスは空にすることができます。
string
要素は Unicode 文字であり、1 バイトを超えることができます。
string
要素はデータ (エンコーディング) の意味を保持しますが、保持し[]bytes
ません。
- 等値演算子は型に対して定義されています
string
が、型に対して定義されていませんslice
。
ご覧のとおり、これらは異なるプロパティを持つ 2 つの異なるタイプです。さまざまな文字列関連の型を説明する素晴らしいブログ投稿があります [1]。
コード スニペットにある問題についてお知らせします。
包括的in.ReadBytes(char)
にバイトスライスを返すことに注意してください。char
したがって、コードinput
では '\n' で終わります。コードを希望どおりに動作させたい場合は、次を試してください。
if string(input) == "example\n" { // or "example\r\n" when on windows
os.Exit(0)
}
また、端末のコード ページが.goソース ファイルと同じであることを確認してください。さまざまな行末スタイルに注意してください (Windows は "\r\n" を使用します)。標準の go コンパイラは内部で utf8 を使用します。
[1]文字列処理のための Go データ型の比較。