Go言語で文字列とバイトスライスを相互変換!初心者でもわかる方法
生徒
「Go言語で文字列をバイト単位で操作したいときはどうすればいいですか?」
先生
「文字列をbyteスライスに変換すると、バイト単位で細かく操作できます。その逆に、バイトスライスから文字列に戻すことも簡単にできます。」
生徒
「バイトスライスって何ですか?」
先生
「byteは0から255までの数値を表す型で、文字列の中の文字は内部的にバイト列として保存されています。バイトスライスにすると、文字列を数字の配列のように扱えます。」
生徒
「なるほど!具体的にはどうやって変換するんですか?」
先生
「それでは、基本的な方法を見ていきましょう!」
1. 文字列をバイトスライスに変換する方法
Go言語では文字列を[]byte型にキャストすることで、簡単にバイトスライスに変換できます。これにより、文字列の内容をバイト単位で読み書きすることができます。
package main
import "fmt"
func main() {
str := "Hello, Go!"
b := []byte(str)
fmt.Println(b)
}
[72 101 108 108 111 44 32 71 111 33]
出力を見ると、文字が対応するASCIIコードやUTF-8コードに変換されていることがわかります。例えば、'H'は72、'e'は101になります。
2. バイトスライスを文字列に変換する方法
逆に、バイトスライスから文字列を作りたい場合は、string()で簡単に変換できます。
package main
import "fmt"
func main() {
b := []byte{72, 101, 108, 108, 111}
str := string(b)
fmt.Println(str)
}
Hello
このようにバイトスライスを文字列に戻すことで、任意のバイトデータを文字列として扱えます。
3. 日本語などのマルチバイト文字の注意点
日本語や絵文字など、1文字が複数バイトで表現される文字を扱う場合も、同じ方法で変換できます。ただし、バイトスライスを操作するときは、文字が途中で切れないように注意する必要があります。
package main
import "fmt"
func main() {
str := "こんにちは"
b := []byte(str)
fmt.Println(b)
fmt.Println(string(b))
}
[227 129 147 227 129 147 227 129 161 227 129 175 227 129 139]
こんにちは
このように、バイトスライスに変換しても、string()で元に戻すことができます。
4. バイトスライスを使った応用例
バイトスライスに変換することで、文字列の一部を置換したり、文字コードを直接操作することができます。
package main
import "fmt"
func main() {
str := "Hello, Go!"
b := []byte(str)
b[7] = 'g' // 'G' を 'g' に変更
fmt.Println(string(b))
}
Hello, go!
このように、文字列を直接書き換えることはできませんが、バイトスライスを介すると簡単に文字を変更できます。
5. パフォーマンスと使い分けのポイント
文字列とバイトスライスは相互変換が簡単ですが、大きなデータを頻繁に変換するとメモリの負荷が増えます。文字列の読み取りだけなら変換は不要ですが、文字列を編集する場合やバイト単位の処理が必要な場合は、バイトスライスを使うのが便利です。