Go言語の文字列の部分文字列(スライス)取得方法を徹底解説!初心者でも簡単に理解できる使い方
生徒
「Go言語で文字列の一部だけを取り出す方法ってありますか?」
先生
「はい、Go言語では文字列をスライスすることで部分文字列を取り出すことができます。」
生徒
「スライスって聞いたことがありますが、どういう意味なんですか?」
先生
「スライスとは配列や文字列の一部を切り出す操作のことです。Goではとてもよく使われる機能なので、順番に見ていきましょう。」
1. Go言語における文字列とスライスの基本
Go言語で文字列を扱うときにはstring型を使います。文字列は文字が並んだデータの集まりです。そしてGo言語では、この文字列の一部を取り出すために「スライス」という仕組みを利用します。
「スライス」という言葉は「切り取る」という意味です。たとえばパンをスライスして一枚だけ取るように、文字列から一部分を切り出すことができます。初心者が文字列操作を理解するうえで、このスライスの考え方はとても重要です。
2. 部分文字列を取得する基本構文
Go言語で文字列をスライスするときの基本構文は以下のようになります。
text[start:end]
このとき、startは切り出しを始める位置、endは切り出しを終える位置を表します。ただし、endの位置の文字は含まれないことに注意してください。
例えば、「Hello」という文字列から「He」だけを取り出したい場合は、text[0:2]と書きます。文字の数え方は0から始まるので、最初の文字「H」はインデックス0、次の「e」はインデックス1となります。
3. 部分文字列を取り出す具体例
それでは実際にGo言語で部分文字列を取り出してみましょう。
package main
import "fmt"
func main() {
text := "Hello, World!"
part1 := text[0:5]
part2 := text[7:12]
fmt.Println(part1)
fmt.Println(part2)
}
Hello
World
この例では「Hello, World!」から「Hello」と「World」を切り出しています。スライスの数字を変えることで、自由に部分文字列を取得できます。
4. 省略記法を使った部分文字列の取得
Go言語ではスライスの開始位置や終了位置を省略することができます。
text[:end]:先頭からendの位置までを取得text[start:]:startから最後までを取得text[:]:全文字列を取得
package main
import "fmt"
func main() {
text := "Golang"
fmt.Println(text[:4]) // Gola
fmt.Println(text[2:]) // lang
fmt.Println(text[:]) // Golang
}
Gola
lang
Golang
このように省略記法を使うと、より簡単に部分文字列を扱うことができます。
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
このようにスライスを活用することで、文字列を柔軟に操作できるようになります。データ処理や入力チェックなど、幅広い場面で役立ちます。