GOのネストされたループから脱却する方法
Goでは、ネストされたループから抜け出すには、ラベル付きのブレークステートメントを使用するか、機能を介して戻ります。 1。ラベル付きブレークを使用します:アウターループなどの外側ループの前にタグを配置します。 2。ネストされたループを関数に入れ、条件が満たされたら事前に戻り、それによってすべてのループを終了します。 3.フラグ変数やgotoを使用しないでください。前者は長く間違いを犯すのが簡単で、後者は推奨されません。正しいアプローチは、タグがそれ以降ではなくループの前でなければならないということです。これは、GOの多層ループから抜け出すための慣用的な方法です。
GOでは、他の言語のように複数のネストされたループから直接壊れる組み込みのbreak
キーワードはありません。ただし、ラベル付きのブレークを使用してネストされたループから壊すことができます。この目的のために特別にサポートされています。

きれいかつ効果的にそれを行う方法は次のとおりです。
labeラベル付きブレークを使用して、ネストされたループを終了します
GOを使用すると、ラベルを外側のループに取り付けてから、そのラベルとともにbreak
を使用して、ネストされたループの奥深くから出ることができます。

構文:
アウターループ: のために { のために { break outouterloop //ループの外側を終了します } }
例:
パッケージメイン 「FMT」をインポートする func main(){ i:= 0; I <3;私 { j:= 0; J <3; J { i == 1 && j == 1の場合{ アウターループを壊します } fmt.printf( "i =%d、j =%d \ n"、i、j) } } アウターループ: fmt.println( "ネストされたループから出る") }
待ってください - それはうまくいきません!ラベルは、後でではなく、外に出たいループの前に配置する必要があります。
✅正しいバージョン:

パッケージメイン 「FMT」をインポートする func main(){ アウターループ: i:= 0; I <3;私 { j:= 0; J <3; J { i == 1 && j == 1の場合{ アウターループを壊します } fmt.printf( "i =%d、j =%d \ n"、i、j) } } fmt.println( "ネストされたループから出る") }
出力:
i = 0、j = 0 i = 0、j = 1 i = 0、j = 2 i = 1、j = 0 ネストされたループから終了しました
i == 1
およびj == 1
とすぐに、 break OuterLoop
両方のループをすぐに終了します。
?代替: return
関数を使用します
あなたが関数の中にいる場合、別のクリーンな方法は、リターンを使用して早期に終了return
ことです。
func findValue(){ i:= 0; I <10;私 { j:= 0; J <10; J { SomeCondition(i、J)の場合{ fmt.println( "Found!") //関数を終了し、すべてのループを効果的に破壊します } } } }
特にロジックが複雑な場合、これはしばしばよりクリーンで読みやすくなります。
∎その他のオプション(推奨されていません)
フラグ変数の使用:フラグを設定して各ループを手動で破ることができますが、これは乱雑になります:
見つかった:= false i:= 0; I <3;私 { 見つかった場合{ 壊す } j:= 0; J <3; J { i == 1 && j == 1の場合{ 見つかった= true 壊す } fmt.printf( "i =%d、j =%d \ n"、i、j) } }
これは機能しますが、冗長であり、より深いネスティングでエラーが発生しやすいです。
ゴット?
goto
GOに存在しますが、ループから壊れるためだけに使用しないでください。ラベル付きbreak
は、意図したソリューションです。- cleanクリーンで読みやすい制御フローにラベル付きブレークを使用します。
- ✅またはループを関数に包み、
return
を使用します。 - flag絶対に必要でない限り、フラグの変数や
goto
を避けてください。
まとめ
Goでネストされたループから脱却するには:
ラベルの付いた休憩は、慣用的なゴーの方法です。ただ覚えておいてください。ラベルを外側ではなく外側のループの前に置いてください。
基本的に、それだけです - goは、PHPまたは同様のbreak 2
と同じではなく、ツールを提供します。
以上がGOのネストされたループから脱却する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

答えは次のとおりです。GOアプリケーションには必須のプロジェクトレイアウトがありませんが、コミュニティは一般に、保守性とスケーラビリティを改善するために標準構造を採用しています。 1.CMD/プログラムの入り口を保存します。各サブディレクトリは、CMD/MyApp/Main.goなどの実行可能ファイルに対応しています。 2.内部/保存プライベートコード、外部モジュールによってインポートすることはできず、ビジネスロジックとサービスのカプセル化に使用されます。 3.PKG/ストア他のプロジェクトをインポートするための公に再利用可能なライブラリ。 4.API/オプションでOpenapi、Protobuf、およびその他のAPI定義ファイルを保存します。 5.Config/、Scripts/、およびWeb/Store構成ファイル、スクリプト、Webリソース。 6.ルートディレクトリにはgo.mod and go.sumが含まれています

GoのIF-Elseステートメントは括弧を必要としませんが、巻き毛の装具を使用する必要があります。スコープを制限する場合の変数の初期化をサポートします。条件は、エラーチェーンを介して審査できます。これは、エラーチェックによく使用されます。可変宣言と条件の組み合わせは、コードのシンプルさとセキュリティを改善することができます。

Goのフラグパッケージは、コマンドラインパラメーターを簡単に解析できます。 1. flag.type()を使用して、文字列、整数、ブール膜などのタイプフラグを定義します。 2。flag.typevar()を介して変数にフラグを解析して、ポインター操作を避けることができます。 3。flag.parse()を呼び出した後、flag.args()を使用して後続の位置パラメーターを取得します。 4。flag.valueインターフェイスを実装すると、カスタムタイプをサポートして、ほとんどの単純なCLI要件を満たすことができます。複雑なシナリオは、SPF13/COBRAライブラリに置き換えることができます。

Gorunは、GOプログラムをすばやくコンパイルして実行するコマンドです。 1.コンパイルを完了して1つのステップで実行し、一時的な実行可能ファイルを生成し、プログラムが終了した後に削除します。 2。これは、開発とテストが簡単なメイン機能を含む独立したプログラムに適しています。 3.マルチファイル操作をサポートし、Gorun*.goまたはすべてのファイルを介して実行できます。 4.依存関係を自動的に処理し、モジュールシステムを使用して外部パッケージを解析します。 5.ライブラリやパッケージには適しておらず、永続的なバイナリファイルを生成しません。したがって、スクリプト、学習、頻繁な変更中の迅速なテストに適しています。それは効率的で簡潔なランニング方法です。

GOアプリケーションでのルーティングは、プロジェクトの複雑さに依存します。 1.標準のライブラリNet/HTTPSERVEMUXは、外部依存関係のない単純なアプリケーションに適しており、軽量ですが、URLパラメーターと高度なマッチングをサポートしていません。 2。CHIなどのサードパーティルーターは、モジュラー設計に適したミドルウェア、パスパラメーター、ネストされたルーティングを提供します。 3. GINは、APIやマイクロサービスに適した優れたパフォーマンス、組み込みのJSON処理、リッチ機能を備えています。柔軟性、パフォーマンス、または機能統合が必要かどうかに基づいて選択する必要があります。小規模プロジェクトは標準的なライブラリを使用しており、中型および大規模プロジェクトはChiまたはGinを推奨し、最終的に単純なものから複雑なものまでスムーズな拡大を達成します。

GOでは、定数はconstキーワードを使用して宣言され、値を変更することはできず、タイプまたはタイプのものではありません。 1. constpi = 3.14159などの単一の定数宣言。 2。ブロック内の複数の定数宣言はconst(pi = 3.14159; language = "go"; isCool = true)などです。 3。constsecondsinminuteint = 60などの明示的なタイプ定数。 4. IOTAを使用して、const(日曜日= IOTA;月曜日、火曜日)などの列挙値を生成し、値0、1、および2を順番に割り当て、IOTAはビット操作などの式に使用できます。定数はコンパイル時に値を決定する必要があります。

GOのSQLデータベースに接続するには、データベース/SQLパッケージと特定のデータベースドライバーを使用する必要があります。 1.データベース/SQLパッケージとドライバー(github.com/go-sql-driver/mysqlなど)は、ドライバーが初期化にのみ使用されることを示す前に強調することに注意してください。 2。sql.open( "mysql"、 "user:password@tcp(localhost:3306)/dbname")を使用してデータベースハンドルを作成し、db.ping()を呼び出して接続を確認します。 3.db.query()を使用してクエリを実行し、db.exec()を実行して実行します

構造化されたロギング、コンテキストの追加、ログレベルの制御、ロギングに敏感なデータの回避、一貫したフィールド名の使用、正確にロギングエラー、パフォーマンス、中央監視ログ、統合構成は、効率的なロギングを実現するためのベストプラクティスです。まず、JSON形式の構造化されたログ(Uber-Go/ZAPまたはRS/Zerologの使用など)が、エルク、DataDOG、およびその他のツールの解析と統合を促進します。第二に、IDやユーザーIDなどのコンテキスト情報を要求することにより、ログのトレーサビリティが強化され、Context.ContextまたはHTTPミドルウェアを介して注入できます。第三に、デバッグ、情報、警告、エラーレベルを合理的に使用し、環境変数を介して動作します。
