Go言語の文字列の部分文字列(スライス)取得方法を徹底解説!初心者でも簡単に理解できる使い方
生徒
「Go言語で文字列の一部だけを取り出す方法ってありますか?」
先生
「はい、Go言語では文字列をスライスすることで部分文字列を取り出すことができます。」
生徒
「スライスって聞いたことがありますが、どういう意味なんですか?」
先生
「スライスとは配列や文字列の一部を切り出す操作のことです。Goではとてもよく使われる機能なので、順番に見ていきましょう。」
1. Go言語における文字列とスライスの基本
Go言語で文字列を扱うときには string 型を使います。
文字列は一見すると「文字の集まり」に見えますが、Go言語の内部では
バイト列として管理されている点が大きな特徴です。
この仕組みを理解しておくと、後で出てくるスライス操作や日本語文字列の扱いも
スムーズに理解できるようになります。
文字列の一部だけを取り出したいときに使うのが「スライス」です。 スライスとは、文字列や配列の一部分を指定して切り出す操作のことを指します。 たとえば文章の先頭だけを取得したり、決まった位置から後ろだけを取り出したりといった処理が、 スライスを使うことで簡単に書けるようになります。
プログラミング未経験の方は少し難しく感じるかもしれませんが、 イメージとしては「文字列に番号が振られていて、その範囲を指定して取り出す」と考えると分かりやすいです。 Go言語では、この番号を「インデックス」と呼び、0から順番に数えていきます。
package main
import "fmt"
func main() {
text := "Hello"
fmt.Println(text) // 元の文字列を表示
}
この例では、まず string 型の変数に文字列を代入しています。
これが、これからスライス操作を行う元になる文字列です。
次の章からは、この文字列をどのように切り出して部分文字列を取得するのかを、
実際のコードを使って詳しく見ていきます。
2. 部分文字列を取得する基本構文
Go言語で文字列の一部(部分文字列)を取り出すときは、スライス記法を使います。 基本の形はとてもシンプルで、取り出したい「範囲」を数字で指定します。
text[start:end]
start は切り出しを始める位置、end は切り出しを終える位置です。
ここで大事なのは、end の位置の文字は含まれないというルールです。
つまり「start から end の手前まで」が取り出されます。
このルールを覚えておくと、1文字だけ取りたいときも迷いにくくなります。
もうひとつのポイントは、位置を表す数字(インデックス)は 0 から始まることです。 たとえば「Hello」なら、Hが0、eが1、lが2…という順番になります。 「何文字目か」ではなく「0から数えた位置」と考えると分かりやすいです。
package main
import "fmt"
func main() {
text := "Hello"
fmt.Println(text[0:2]) // He(0から2の手前まで)
fmt.Println(text[1:4]) // ell(1から4の手前まで)
fmt.Println(text[4:5]) // o(1文字だけ取り出す例)
}
He
ell
o
このように、スライスの範囲を変えるだけで、必要な部分文字列を自由に取り出せます。 まずは短い英単語で「どこからどこまで取られるのか」を試してみると、感覚がつかみやすいです。
3. 部分文字列を取り出す具体例
それでは実際に、Go言語のスライス記法を使って部分文字列を取り出してみましょう。
ここでは「Hello, World!」という文字列から、前半の Hello と後半の World を切り出します。
いきなり難しく考えず、「取り出したい範囲の番号を指定するだけ」と思ってOKです。
コツは、取り出したい文字の最後の位置より1つ先を end にすることです。
たとえば Hello は5文字なので、先頭の0から「5の手前」まで指定すると Hello になります。
また、カンマとスペースが間に入っているので、World を取るときは開始位置がずれないように注意します。
package main
import "fmt"
func main() {
text := "Hello, World!"
part1 := text[0:5] // 「Hello」
part2 := text[7:12] // 「World」
fmt.Println(part1)
fmt.Println(part2)
}
Hello
World
この例では、text[0:5] が先頭から5文字分を切り出し、text[7:12] が7番目から12番目の手前までを切り出しています。
数字を少し変えるだけで、先頭だけ・途中だけ・末尾だけなど、いろいろな部分文字列を取り出せるようになります。
まずは同じ文字列で範囲を1つずつ動かしてみると、スライスの感覚がつかみやすいです。
4. 省略記法を使った部分文字列の取得
Go言語では、スライスの start や end を省略して書くことができます。
毎回数字を全部書かなくていいので、文字列の部分文字列(スライス)をサッと取り出したいときに便利です。
「先頭から」「最後まで」といった、よくある切り出しが短く書けるのがポイントです。
text[:end]:先頭からendの手前までを取得(startを省略=0扱い)text[start:]:startから最後までを取得(endを省略=末尾まで)text[:]:全文字列を取得(「そのまま使う」イメージ)
省略してもルールは同じで、end は含まれません。
そのため text[:4] は「0〜3番目まで」を意味します。
初心者のうちは、実行結果を見ながら「どこまで取れているか」を確認すると理解が早いです。
package main
import "fmt"
func main() {
text := "Golang"
fmt.Println(text[:4]) // Gola(先頭から4の手前まで)
fmt.Println(text[2:]) // lang(2から最後まで)
fmt.Println(text[:]) // Golang(全部)
}
Gola
lang
Golang
実務でも「先頭数文字だけチェックしたい」「末尾の拡張子だけ取りたい」など、前後どちらかが決まっている場面はよくあります。 省略記法を覚えておくと、Go言語の文字列操作が読みやすくなり、コードを書く手間も減ります。
5. 日本語の文字列を扱うときの注意点
Go言語の文字列は内部的に「UTF-8」という形式で保存されています。そのため、英数字は1文字が1バイトですが、日本語のひらがなや漢字は1文字が3バイトになることがあります。
そのため、日本語文字列を単純にスライスすると文字化けする可能性があります。例えば「こんにちは」という文字列をスライスすると、正しく文字が切り出せない場合があります。
このような場合は、[]runeに変換してからスライスするのが一般的です。runeとは、Unicodeの文字を表す型のことです。
package main
import "fmt"
func main() {
text := "こんにちは"
runes := []rune(text)
part := string(runes[0:3])
fmt.Println(part)
}
こんにち
この方法なら日本語でも正しく部分文字列を取り出すことができます。初心者が日本語文字列を扱うときは必ず意識しておきましょう。
6. 部分文字列の応用例
部分文字列の取得は、実際のプログラムでもよく使われます。例えば、ユーザーが入力したメールアドレスからドメイン部分だけを取り出したり、URLから特定の部分を抽出したりする場面です。
package main
import "fmt"
func main() {
email := "user@example.com"
domain := email[5:]
fmt.Println("Domain:", domain)
}
Domain: example.com
このようにスライスを活用することで、文字列を柔軟に操作できるようになります。データ処理や入力チェックなど、幅広い場面で役立ちます。
まとめ
Go言語における文字列スライスと部分文字列取得の総まとめ
この記事では、Go言語で文字列の一部を取り出す「部分文字列」や「スライス」の基本から応用までを、初心者の方にも分かりやすい形で解説してきました。 Go言語の文字列は一見すると単なる文字の並びに見えますが、内部ではバイト列として管理されているという特徴があります。 この仕組みを理解することが、正しい文字列操作や安全なスライス処理につながります。
基本となるスライス記法は text[start:end] という形で、開始位置と終了位置を指定するだけで部分文字列を取得できます。
このとき、終了位置の文字は含まれないというルールや、インデックスは0から始まるという点は、Go言語で文字列操作を行う上でとても重要です。
これらのルールをしっかり押さえておくことで、思い通りの部分文字列を正確に取り出せるようになります。
また、開始位置や終了位置を省略できる省略記法を使うことで、先頭からの取得や末尾までの取得なども簡潔に書けるようになります。 この省略記法はコードを読みやすくし、処理内容を直感的に理解しやすくしてくれるため、実務でもよく使われます。 短いサンプルコードを試しながら、どのような範囲が切り出されるのかを確認することが、理解を深める近道です。
日本語文字列とUTF-8を意識したスライス操作
Go言語で特に注意が必要なのが、日本語文字列を扱う場合です。
日本語のひらがなや漢字はUTF-8では複数バイトで表現されるため、英数字と同じ感覚でスライスすると文字化けが起こる可能性があります。
そのため、日本語の部分文字列を安全に扱うには、[]rune に変換してからスライスする方法が一般的です。
runeはUnicodeの文字単位で扱われるため、見た目通りの文字数で部分文字列を切り出せます。 初心者のうちは「日本語を扱うときは rune に変換する」という意識を持っておくと、予期せぬバグを防ぎやすくなります。 特にユーザー入力や画面表示に関わる処理では、この点を理解しているかどうかで品質に大きな差が出ます。
// まとめ用の日本語スライス例
text := "こんにちは"
runes := []rune(text)
result := string(runes[0:2])
fmt.Println(result)
このように、Go言語の文字列スライスは単純な構文でありながら、内部構造を理解して使うことで、より安全で柔軟な文字列処理が可能になります。 メールアドレスの分解やURLの解析、入力データのチェックなど、部分文字列の取得は多くの場面で活用されます。 基本をしっかり身につけておくことで、さまざまな応用処理にも対応できるようになります。
生徒
「Go言語の文字列って、ただの文字の並びだと思っていましたが、 実はバイト列として扱われているというのが意外でした」
先生
「そこに気づけたのはとても大事ですね。 その理解があると、スライスや部分文字列の挙動も納得しやすくなります」
生徒
「start と end の指定で、end の文字が含まれないというルールも、 実際にコードを書いてみてようやく分かりました」
先生
「そうですね。手を動かして確認することで、インデックスの感覚が自然と身についてきます。 省略記法も慣れるととても便利ですよ」
生徒
「日本語を扱うときに rune に変換する必要があるという点は、 実際のプログラムで特に気をつけたいと思いました」
先生
「その意識があれば大丈夫です。 今回学んだ文字列スライスの知識は、Go言語でのデータ処理の基礎になります。 ぜひ実際の開発でも活用してみてください」
Go言語の文字列スライスと部分文字列取得は、基礎でありながら非常に重要なテーマです。 正しい理解を積み重ねることで、読みやすく安全なコードを書けるようになります。 今回の内容を振り返りながら、ぜひ自分のプログラムでも積極的に使ってみてください。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!