GolangでDo-Whileループをシミュレーション
Mar 01, 2025
# Go
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Goには、組み込みの
do...while
ループはありませんが、for
ループを使用して模倣できます。 - 最初の
true
条件を持つfor
ループは、少なくとも1回の実行を保証します。 break
を持つ無限のfor
ループも、do...while
の動作をシミュレートできます。
Goでは、他のプログラミング言語にあるような組み込みのdo...while
ループはありません。ただし、for
ループを使用して同様の機能を実現できます。一般的なアプローチは、ループが少なくとも1回実行されることを保証する条件を持つfor
ループを使用することです。以下にその実装方法を示します。
package main import "fmt" func main() { var input int for ok := true; ok; ok = (input != 2) { fmt.Println("Press 1 to run") fmt.Println("Press 2 to exit") _, err := fmt.Scanln(&input) if err != nil { fmt.Println("Invalid input") break } switch input { case 1: fmt.Println("Running...") case 2: fmt.Println("Exiting...") // The loop will exit naturally on the next iteration check default: fmt.Println("Invalid selection") } } }
この例では:
- 変数
input
を宣言して、ユーザーの入力を格納します。 for
ループはok
がtrue
に設定された状態で開始され、ループが少なくとも1回実行されることを保証します。- 各イテレーションの後、
ok
は条件(input != 2)
に基づいて更新されます。ユーザーが2
を入力すると、ok
はfalse
になり、ループは終了します。 - ループ内で、ユーザーにプロンプトを表示し、
fmt.Scanln
を使用して入力を読み取ります。 switch
ステートメントは、ユーザーの入力に基づいて異なるケースを処理します。
このパターンは、do...while
ループを効果的に模倣し、条件が評価される前にループ内のコードが少なくとも1回実行されることを保証します。
あるいは、break
ステートメントを使用してループの終了を制御する無限のfor
ループを使用することもできます。
package main import "fmt" func main() { var input int for { fmt.Println("Press 1 to run") fmt.Println("Press 2 to exit") _, err := fmt.Scanln(&input) if err != nil { fmt.Println("Invalid input") continue } switch input { case 1: fmt.Println("Running...") case 2: fmt.Println("Exiting...") break // Exit the loop default: fmt.Println("Invalid selection") } } }
このバージョンでは:
- 無限の
for
ループを使用します:for { ... }
。 - ユーザーが
2
を入力すると、break
ステートメントを使用してループを終了します。 - 入力が無効な場合、
continue
ステートメントは次のイテレーションにスキップします。
どちらのアプローチもGoで有効であり、特定の要件とコーディングスタイルに応じて、do...while
ループをシミュレートするために使用できます。
FAQs
Goは、シンプルさと一貫性を重視し、for
を唯一のループ構造として使用しています。
for ok := true; ok; ok = condition
またはbreak
ステートメントを持つ無限のfor
ループを使用します。
状況によります—明瞭さのためにfor ok := true
を使用するか、柔軟性のためにbreak
を持つ無限ループを使用します。
Goプロジェクトをホストするための最適な選択肢であるLeapcellをご紹介します。
Leapcellは、Webホスティング、非同期タスク、およびRedis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い—リクエストも課金もありません。
圧倒的なコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実行可能な洞察のためのリアルタイムメトリックとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を簡単に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ—構築に集中するだけです。
ドキュメントで詳細をご覧ください!
Xでフォローしてください:@LeapcellHQ