Go言語で文字列とバイトスライスを相互変換!初心者でもわかる方法
生徒
「Go言語で文字列をバイト単位で操作したいときはどうすればいいですか?」
先生
「文字列をbyteスライスに変換すると、バイト単位で細かく操作できます。その逆に、バイトスライスから文字列に戻すことも簡単にできます。」
生徒
「バイトスライスって何ですか?」
先生
「byteは0から255までの数値を表す型で、文字列の中の文字は内部的にバイト列として保存されています。バイトスライスにすると、文字列を数字の配列のように扱えます。」
生徒
「なるほど!具体的にはどうやって変換するんですか?」
先生
「それでは、基本的な方法を見ていきましょう!」
1. 文字列をバイトスライスに変換する方法
Go言語では、文字列を[]byte型にキャストすることで、簡単にバイトスライスに変換できます。難しいことをしているように見えますが、実際には「文字列を中身の数字の並びとして見てみる」くらいのイメージで大丈夫です。バイトスライスにしておくと、文字列の内容をバイト単位で読み書きできるため、文字ごとの操作や通信データの処理などにとても便利です。
ポイントとして、Goの文字列は不変(immutable)で、直接書き換えることはできません。しかし、一度バイトスライスに変換してしまえば、中身を配列のように変更できるようになります。「表示用は文字列」「中身をいじるときはバイトスライス」と使い分けるイメージを持っておくと理解しやすくなります。
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として表現されています。これは「文字」を「数値」に置き換えているだけなので、特別な暗号ではありません。こうしてバイトスライスにすると、文字列の特定の文字を数値として扱ったり、バイトの並びを入れ替えたりできるようになり、Go言語での文字列操作の表現力がぐっと広がります。
2. バイトスライスを文字列に変換する方法
次は、その逆パターンです。さきほどは文字列からバイトスライスへの変換を見ましたが、「バイトの並び」からふつうの文字列に戻したい場面もよくあります。Go言語では、[]byte型の値に対してstring()を使うだけで、簡単に文字列を作ることができます。
たとえば、通信の受信データやファイルから読み込んだ内容は、まずバイト列([]byte)として扱うことが多いです。そのままだと画面に意味のある文字として表示しづらいので、string()で人間が読める文字列に変換する、という流れを覚えておくと実務でも役立ちます。
package main
import "fmt"
func main() {
b := []byte{72, 101, 108, 108, 111}
str := string(b)
fmt.Println(str)
}
Hello
この例では、[]byte{72, 101, 108, 108, 111}というバイトスライスを、string(b)とすることで"Hello"という文字列に変換しています。さきほど見たように、72は'H'、101は'e'など、1文字ずつのコードが並んでいるだけなので、それをまとめて「文字列」として解釈し直しているイメージです。
このようにバイトスライスを文字列に戻すことで、任意のバイトデータをコンソールに表示したり、ログとして保存したり、画面にメッセージとして出したりできるようになります。Go言語で文字列とバイトスライスを行き来できるようになると、ネットワーク通信やファイル入出力など、より実用的なプログラム作成にもスムーズに進めます。
3. 日本語などのマルチバイト文字の注意点
日本語や絵文字は、英数字のように1文字=1バイトではなく、複数バイトを使って表現されます。これを「マルチバイト文字」と呼びます。Go言語では、日本語もUTF-8という仕組みでバイト列として扱われているため、文字列を[]byteに変換すると、文字単位ではなく“バイト単位”で分解された結果が表示されます。
バイトスライスを扱うときに注意したいのは、「バイト列の途中で切ったり並びを崩すと、文字として正しく復元できなくなる」という点です。日本語は1文字が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]
こんにちは
この例でも、1文字ごとではなく細かい数値がずらっと並んでいますが、これはUTF-8で表されたバイトの集まりです。バイトスライスを変更する場合は、必ず文字の“塊”が途中で切れないよう気をつけましょう。とはいえ、このように正常なバイト列であれば、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. パフォーマンスと使い分けのポイント
文字列とバイトスライスは相互変換が簡単ですが、大きなデータを頻繁に変換するとメモリの負荷が増えます。文字列の読み取りだけなら変換は不要ですが、文字列を編集する場合やバイト単位の処理が必要な場合は、バイトスライスを使うのが便利です。
まとめ
Go言語で学んだ文字列操作の総整理
ここまで、Go言語で文字列とバイトスライスを相互に変換する方法について具体例を交えながら丁寧に確認してきました。文字列を扱う際、内部的にはバイト列として保持されているため、[]byteへの変換は文字列処理における基本的で重要な操作です。とりわけGo言語では、文字列が不変であるという特性から、編集や部分的な変更を行いたい場合にはバイトスライスを経由して操作する流れが自然になります。また、英数字だけでなく、日本語や絵文字といったマルチバイト文字を扱う際にも正しく理解しておくことで、より安全で効率的なプログラムが書けるようになります。
例えば、文字列からバイトスライスへ変換することで、一文字一文字が持つバイト列を細かく確認でき、データ処理の過程でも役立ちます。さらに、逆にstring()で元に戻す方法を理解しておけば、必要なタイミングで文字列に変換して画面表示やログ出力に活用できます。こうした変換操作は、実際の開発環境でも頻繁に用いられ、パフォーマンスやメモリ効率にも関わります。
下記のサンプルでは、記事で扱った手順を、最後の振り返り用としてひとつにまとめています。クラス名やタグ構成はこれまでの記事と同じ流れで書いているため、そのまま参考として利用できます。
サンプルプログラムのまとめ例
package main
import "fmt"
func main() {
original := "こんにちはGo言語"
bs := []byte(original)
fmt.Println(bs)
bs[9] = 71 // G のバイトコードに置換
converted := string(bs)
fmt.Println(converted)
}
上記のように、ひらがなや漢字といった複雑な文字列を扱う場合でも、バイトスライスを経由して必要な部分だけ変更でき、元の文字列に再構築することができます。ここで気をつけるべき点は、マルチバイト文字の途中を変更してしまうと文字化けが起こる可能性があるため、置換対象が必ず1バイト単位の部分かどうかを見極めることです。特に日本語を含む場面では、RuneやUTF-8の構造理解がより深いレベルの開発につながります。 また、プログラム全体のメモリ利用にも意識を向けることで、変換処理が多い場面ではより軽量な手法を選択する判断も必要になります。文字列とバイトスライスを適切に使い分けることで、効率の良いコードを実現することができ、Go言語での開発において大きなメリットとなります。
生徒
「きょう学んだ文字列とバイトスライスの変換は、どんな場面で役に立つんですか?」
先生
「ひらがなや漢字を含む文字列を分解したり、部分的に書き換えたりしたいときにとても便利だよ。特にデータ処理や通信処理では、一度バイト列にして扱うことが多いんだ。」
生徒
「なるほど。文字列が不変だから、バイトスライスを使って編集するんですね。」
先生
「そのとおり。編集したいときはバイトスライス、表示したいときは文字列に戻す。こうした流れを覚えておけば、Go言語での文字処理がぐっと楽になるよ。」
生徒
「きょうの内容のおかげで、バイトスライスと文字列の仕組みがよく分かりました!」
先生
「よくがんばったね。次はRuneについても学んで、もっと深い文字コードの世界を理解していこう。」
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!