[解決済み] なぜGoには "goto "文があるのですか?[クローズド]
2022-05-31 01:41:16
質問
驚いたことに、Goには 'ゴト' ステートメントがあることに驚きました。私はいつも、'goto' ステートメントはプログラムの実際の流れを妨げるので過去のものであり悪であり、関数やメソッドは常に流れを制御するためのより良い方法であると教えられてきました。
私は何かを見逃しているに違いない。なぜ Google はそれを含めたのでしょうか?
どのように解決するのですか?
実際にGo標準ライブラリのソースコードを確認すると、どこに
goto
が実際にうまく適用されていることがわかります。
例えば
math/gamma.go
というファイルがあります。
は
goto
ステートメントが使用されます
:
for x < 0 {
if x > -1e-09 {
goto small
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
goto small
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small:
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
は
goto
を使うことで、制御フローのためだけに使われる別の(ブーリアン)変数を導入する必要がなくなります。
この場合
は
goto
文はコードをより読みやすく、より簡単にします。
goto
に対する議論とは全く逆のものです)。
また、注意点として
goto
文は非常に特殊な使用例を持っていることに注意してください。それは
言語仕様で、goto
は、スコープに入る (宣言される) 変数を飛び越えてはならず、他の (コード) ブロックに飛び越えてはならないことを述べています。
関連
-
[解決済み] GORMでレコードを作成・更新するには?
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
Solve golang compile prompt dial tcp 172.217.160.113:443: connectex: 接続の試行に失敗しました
-
[解決済み] go getコマンドとgo mod downloadコマンドの違いは何ですか?
-
[解決済み] go mod vendor` コマンドの目的は何ですか?
-
[解決済み] Goにforeachループはあるのか?
-
[解決済み] デュレーションと整数を掛け合わせる方法は?
-
[解決済み】Javaにgoto文はあるのか?
-
[解決済み】bashに「goto」文はあるのか?
-
[解決済み】GoはREPLを提供しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】vsコードの解決方法 - goplsコマンドが使用できません。
-
[解決済み] GO言語:致命的なエラー:すべてのゴルーチンがスリープしている - デッドロック
-
[解決済み] 文字列の先頭と末尾のホワイトスペースを削除するにはどうすればよいですか?
-
[解決済み] キューの実装はありますか?
-
[解決済み] panic: ランタイムエラー:Goのインデックスが範囲外
-
[解決済み] 関数呼び出しで「値として使用」される
-
[解決済み] go mod vendor` コマンドの目的は何ですか?
-
[解決済み] Goの:=と=の演算子の違い
-
[解決済み】GOTOはまだ有害と考えられている?[クローズド]
-
[解決済み】ループや関数をサポートする言語で「goto」の正当な使用例はあるのか?