カテゴリ: Go言語 更新日: 2025/10/17

Go言語の文字列の比較(==)と文字列比較関数を活用する例

Go言語の文字列の比較(==)と文字列比較関数を活用する例
Go言語の文字列の比較(==)と文字列比較関数を活用する例

先生と生徒の会話形式で理解しよう

生徒

「文字列同士を比べたいときはどうすればいいですか?」

先生

「Goではまず==演算子で等しいかどうかを調べます。さらに大文字小文字を無視した比較や、部分一致などには専用の関数を使います。」

生徒

「具体的にどんな関数を使うんですか?」

先生

「標準ライブラリのstringsパッケージに役立つ関数が揃っています。順に見ていきましょう。」

1. 基本:==演算子での比較

1. 基本:==演算子での比較
1. 基本:==演算子での比較

まず最も簡単なのは==演算子を使った比較です。これは二つのstringが完全に同じバイト列かどうかを判定します。英数字だけの比較や固定の文字列チェックに使います。


package main

import "fmt"

func main() {
    a := "hello"
    b := "hello"
    fmt.Println(a == b) // true
}

注意点として、==は大文字小文字を区別します。"Hello""hello"は異なると判定されます。

2. 大文字小文字を無視して比較したいとき

2. 大文字小文字を無視して比較したいとき
2. 大文字小文字を無視して比較したいとき

ユーザー入力などで大文字小文字を気にせず比較したい場面があります。その場合はstrings.EqualFoldを使います。これはUnicode規則に従って大文字小文字を無視して比較します。


package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.EqualFold("GoLang", "golang")) // true
}

この関数は国際化された文字(日本語以外のアルファベット系)にも適切に対応する点が利点です。

3. 部分一致や前方後方一致のチェック

3. 部分一致や前方後方一致のチェック
3. 部分一致や前方後方一致のチェック

文字列の一部が含まれているかや、先頭や末尾が特定の文字列かを調べるにはstrings.Containsstrings.HasPrefixstrings.HasSuffixを使います。


package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "example@example.com"
    fmt.Println(strings.Contains(s, "@"))       // true
    fmt.Println(strings.HasPrefix(s, "http"))  // false
    fmt.Println(strings.HasSuffix(s, ".com"))  // true
}

これらを組み合わせると、メールアドレスやURLの簡易検証などが簡単にできます。

4. 辞書順(辞書式)比較をしたいとき

4. 辞書順(辞書式)比較をしたいとき
4. 辞書順(辞書式)比較をしたいとき

二つの文字列を辞書順で比較して大小を知りたい場合はstrings.Comparecompareの代替実装で扱えます。strings.Compareは比較結果を整数で返します(負なら左が小さい、ゼロなら等しい、正なら左が大きい)。


package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Compare("apple", "banana")) // -1
    fmt.Println(strings.Compare("apple", "apple"))  // 0
    fmt.Println(strings.Compare("pear", "apple"))   // 1
}

辞書順比較はソートや順位付けに使えます。ただしUnicodeの順序やロケール依存の順序を厳密に扱いたい場合は別途ライブラリが必要です。

5. 実用例:ユーザー入力の検証とトリミング

5. 実用例:ユーザー入力の検証とトリミング
5. 実用例:ユーザー入力の検証とトリミング

実際のアプリでは入力の前後に空白が入ることがあります。比較の前に余分な空白を取り除くためにstrings.TrimSpaceを使うと安全です。


package main

import (
    "fmt"
    "strings"
)

func main() {
    input := "  Admin  "
    if strings.EqualFold(strings.TrimSpace(input), "admin") {
        fmt.Println("管理者として認識されました")
    } else {
        fmt.Println("一般ユーザーです")
    }
}

この例では余分な空白を削除した上で大文字小文字を無視して比較しています。ユーザー名やパスワードのチェック、フォーム入力のバリデーションでよく使うパターンです。

6. 日本語やUnicodeを含む比較の注意点

6. 日本語やUnicodeを含む比較の注意点
6. 日本語やUnicodeを含む比較の注意点

日本語や絵文字を含む文字列の比較は、バイト列での比較と表示上の文字列が必ずしも一致しない場合があります。通常の等価チェックやEqualFoldで困る場面は少ないですが、正規化(例えば合字や濁点の扱い)を厳密にしたい場合はUnicode正規化を行うライブラリを検討してください。

7. まとめではなく最後に一言(注意点の確認)

7. まとめではなく最後に一言(注意点の確認)
7. まとめではなく最後に一言(注意点の確認)

要点を振り返ると、簡単な等価比較は==、大文字小文字無視はstrings.EqualFold、部分一致や接頭辞接尾辞の確認はstrings.Containsstrings.HasPrefix/strings.HasSuffix、辞書順比較はstrings.Compareを使います。実運用ではTrimSpaceで前後の空白を削除してから比較する習慣をつけると安心です。

関連記事:
カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!