Go言語の条件分岐やループの設計パターン集!初心者向けまとめ
生徒
「Go言語って聞いたことあるけど、どうやって条件分岐や繰り返し処理をするんですか?」
先生
「Go言語ではif文やfor文を使って、条件によって処理を変えたり、繰り返しの処理を書いたりできますよ。」
生徒
「そうなんですね!プログラミング初心者なので、基本から教えてください!」
先生
「もちろんです。それでは、Go言語での条件分岐やループの基本と、よく使われる書き方パターンを一緒に見ていきましょう!」
1. Go言語の条件分岐(if文)とは?
Go言語では、条件によって処理を変えるためにif文を使います。例えば、「雨が降っていたら傘を持っていく」というような場面をプログラムで表現できます。
基本的な構文は以下のようになります。
if 条件式 {
// 条件式がtrue(真)のときに実行される処理
}
例えば、「数値が10より大きいかどうか」を判断するコードは次のようになります。
number := 15
if number > 10 {
fmt.Println("10より大きいです")
}
10より大きいです
2. elseとelse ifで複数の条件をチェック
ifだけでなく、他の条件をチェックしたい場合はelseやelse ifを使います。
score := 80
if score >= 90 {
fmt.Println("とてもよくできました")
} else if score >= 70 {
fmt.Println("よくできました")
} else {
fmt.Println("がんばりましょう")
}
よくできました
このようにして、状況に応じたメッセージを出し分けることができます。
3. 条件分岐の設計パターン:フラグチェック
特定の状態を「フラグ」で管理する場合があります。たとえば、ログイン済みかどうかをチェックするコードです。
isLoggedIn := true
if isLoggedIn {
fmt.Println("ようこそ、ユーザーさん!")
} else {
fmt.Println("ログインしてください。")
}
ようこそ、ユーザーさん!
4. Go言語の繰り返し処理(for文)とは?
Go言語では、for文を使って繰り返し処理ができます。たとえば、「5回、同じメッセージを表示する」といった使い方です。
for i := 0; i < 5; i++ {
fmt.Println("こんにちは!")
}
こんにちは!
こんにちは!
こんにちは!
こんにちは!
こんにちは!
この例では、iの値が0から4になるまで繰り返しが続きます。
5. 配列やスライスの繰り返し
Go言語では、配列やスライスという複数の値のまとまりをfor文で繰り返すことができます。
colors := []string{"赤", "青", "緑"}
for _, color := range colors {
fmt.Println(color)
}
赤
青
緑
rangeを使うと、自動的に順番に取り出して処理してくれます。変数名の前のアンダースコア(_)は「使わない値」を意味します。
6. 条件付きの無限ループ
無限ループを作りたいときは、forだけを使います。例えば、ずっと実行し続けるゲームのメインループのような場面です。
for {
fmt.Println("これは無限ループです")
break // 条件によってはbreakで終了できます
}
これは無限ループです
breakを使うと、繰り返しを途中で終わらせることができます。
7. よくあるパターン:条件+繰り返しの組み合わせ
条件分岐と繰り返し処理を組み合わせて使うパターンもよくあります。例えば、「奇数だけを表示する」処理は以下のように書けます。
for i := 1; i <= 10; i++ {
if i%2 != 0 {
fmt.Println(i)
}
}
1
3
5
7
9
%は「余り」を出す演算子です。奇数は2で割って余りが1になります。
8. 条件が成立するまでループし続ける
ユーザーが正しい入力をするまで繰り返すような処理も、条件付きでbreakを使うことで実現できます。
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("名前を入力してください: ")
input, _ := reader.ReadString('\n')
if strings.TrimSpace(input) != "" {
fmt.Println("こんにちは、" + input)
break
}
}
bufioやstringsは標準ライブラリで、ユーザーの入力を扱うのに便利です。TrimSpaceは余分な空白や改行を取り除きます。
まとめ
Go言語での条件分岐や繰り返し処理は、プログラムの流れを制御するための基本でありながら、設計パターンを知っておくことでより柔軟で読みやすく、安全なコードを書けるようになります。今回の記事では、if文を使った基本的な条件分岐、else ifやelseによる複数条件の切り替え、フラグによる状態管理など、初心者でも理解しやすい形で整理して学んできました。特にGo言語はシンプルな構文が特徴のため、条件を正しく捉えて記述するだけで、自然に可読性の高いコードを書けるという魅力があります。
また、繰り返し処理においては、Go言語の代表的な構文であるfor文が非常に柔軟で、配列やスライス、マップなどのデータ構造と組み合わせて使うことで、多様な処理を直感的に表現できることがわかりました。rangeを使うことで手軽に要素を取り出しながらループでき、アンダースコアを使った不要な値の無視など、実務でも頻繁に使われるテクニックも自然と身につけられます。
さらに、無限ループや条件を伴ったループ脱出、条件分岐と繰り返しの組み合わせなど、プログラムの中で非常によく登場するパターンを実例を用いて確認できました。これらのパターンを理解しておくと、ユーザー入力の検証、データ一覧の処理、一定条件に基づいたループ制御など、多くの場面に応用できます。プログラムはただ書くだけでなく、「どうすれば読みやすく、拡張しやすくできるか」を考えながら設計することが重要であり、その意味でも条件分岐やループの設計パターンは基礎力として大きな価値を持ちます。
以下に、今回の内容をさらに深く理解するための追加サンプルコードを紹介し、条件分岐とループの組み合わせを応用したより実践的なパターンを確認していきましょう。
追加サンプルコード:条件分岐+ループ+スライスを使った検索処理
package main
import (
"fmt"
"strings"
)
func main() {
names := []string{"たろう", "はなこ", "じろう", "たかし", "はなえ"}
keyword := "はな"
fmt.Println("検索キーワード:", keyword)
fmt.Println("一致した名前一覧")
found := false
for _, name := range names {
if strings.Contains(name, keyword) {
fmt.Println("-", name)
found = true
}
}
if !found {
fmt.Println("一致する名前はありませんでした")
}
}
このサンプルでは、スライス内から特定のキーワードを含む名前を検索し、見つかった場合のみ結果を表示しています。strings.Containsを使って部分一致を判定しつつ、結果がひとつも見つからなかった場合はフラグを用いてメッセージを切り替えるという、条件分岐とループの組み合わせの基本が詰まった構造になっています。このようなパターンは、実際のアプリケーションでも検索機能やフィルタリング処理としてよく使われる形です。
プログラムを組み立てる際には、「何を条件に判断するのか」「どの値を繰り返し処理するのか」「どのタイミングでループを抜けるのか」といった視点を持つことで、より明確で整理されたコードを書くことができます。条件分岐やループは一見単純な構文ですが、実際にはほとんどのアプリケーションの基礎となっている重要な概念です。今回のパターンを理解することで、より複雑な処理を自然に表現する力が身につき、Go言語のプログラミングが一段と楽しくなるはずです。
また、初心者のうちは「ループがうまく回らない」「条件が正しく判定されない」といったつまずきが起こりやすいですが、そのたびに条件式を整理したり、データ構造を見直したりすることで、少しずつ確実な理解につながっていきます。実際に手を動かし、試行錯誤しながらコードを書くことで、教科書では得られない感覚的な理解も深まりますので、自分なりのパターンを作りながら身につけていきましょう。
生徒
「条件分岐とループって、ただの基本かと思っていましたが、実際にはたくさんのパターンがあるんですね!」
先生
「そうなんです。どのパターンを使うかによって、コードの読みやすさや動作の安定性が大きく変わってきますよ。」
生徒
「追加のサンプルのように、検索機能にも応用できるのはとても参考になりました!」
先生
「検索だけでなく、リストの絞り込みやログの解析など、いろいろな場面で応用できます。実際に書いていくうちに自然と理解が深まっていきますよ。」
生徒
「はい!条件分岐とループのパターンをもっと練習して、自分で設計できるようになりたいです!」