Go言語の文字列の長さを取得する方法!len関数で文字数を数える基本を徹底解説
生徒
「Go言語で文字列の長さを調べたいときはどうしたらいいんですか?」
先生
「Go言語では、len関数を使うと簡単に文字列の長さを取得できます。」
生徒
「文字列の長さって、例えば 'Hello' なら 5 になるってことですか?」
先生
「その通りです!では、実際にサンプルコードを見ながら確認してみましょう。」
1. Go言語で文字列の長さを取得する基本
Go言語では、文字列の長さを数えるときにlen関数を使います。lenは「length(長さ)」の略で、プログラミングではよく登場する言葉です。
例えば、"Hello"という文字列を渡すと、文字数が5と返ってきます。
package main
import "fmt"
func main() {
str := "Hello"
fmt.Println(len(str))
}
5
このように、len関数を使うだけで簡単に文字列の長さを取得できます。
2. len関数はバイト数を返すことに注意
ここで重要なポイントがあります。Go言語の文字列は内部的にはUTF-8という文字コードで表現されています。UTF-8では、アルファベットは1バイトですが、日本語や絵文字は複数バイトで表現されます。
そのため、len関数は「文字数」ではなく「バイト数」を返すのです。
package main
import "fmt"
func main() {
str := "こんにちは"
fmt.Println(len(str))
}
15
「こんにちは」は5文字ですが、UTF-8では1文字が3バイトで表現されるため、len(str)の結果は15になります。初心者の方はここでよく混乱するので注意しましょう。
3. 本当の文字数を数える方法(rune型)
「バイト数ではなく本当の文字数を数えたい」と思ったときは、文字列をruneスライスに変換してからlen関数を使います。
runeとは、Go言語における文字の型で、1文字をユニコードコードポイントとして扱います。簡単に言うと「見た目の1文字」を扱える型です。
package main
import "fmt"
func main() {
str := "こんにちは"
runes := []rune(str)
fmt.Println(len(runes))
}
5
このように、runeに変換すれば「こんにちは」はきちんと5文字として数えることができます。
4. 実用的な使い分け
実際にプログラムを書くときには、次のように使い分けると便利です。
- 英数字だけの文字列 →
lenで十分(例:"Hello") - 日本語や絵文字を含む文字列 →
[]runeに変換してlenを使う
例えばユーザー名の長さを制限するとき、もし日本語も許可するなら、必ずruneを使って文字数を数えるようにしましょう。
name := "田中"
if len([]rune(name)) > 5 {
fmt.Println("名前が長すぎます")
} else {
fmt.Println("登録できます")
}
5. len関数と文字列処理の注意点
最後に、len関数を使うときの注意点をまとめます。
lenは文字数ではなくバイト数を返す- 日本語や絵文字は複数バイトなのでそのままでは正しく文字数を数えられない
- 本当の文字数を取得するなら
[]runeに変換してからlenを使う
特に日本語を扱うプログラムでは、この違いを理解しておかないと、思わぬ不具合が起きることがあります。