[解決済み] 遅延呼び出しに対応した囲碁プログラムを終了させるには?
2023-03-18 23:19:56
質問
私は
defer
を使って手動で作成したアロケーションを解放するために
C
ライブラリを使って手動で作成したアロケーションを解放する必要があります。
os.Exit
を 0 以外のステータスで使用する必要があります。厄介なのは
os.Exit
はどんな遅延命令もスキップすることです。
package main
import "fmt"
import "os"
func main() {
// `defer`s will _not_ be run when using `os.Exit`, so
// this `fmt.Println` will never be called.
defer fmt.Println("!")
// sometimes ones might use defer to do critical operations
// like close a database, remove a lock or free memory
// Exit with status code.
os.Exit(3)
}
遊び場です。 http://play.golang.org/p/CDiAh9SXRM から盗まれた https://gobyexample.com/exit
宣言された囲碁プログラムを終了する方法
defer
の呼び出しを尊重したままプログラムを終了するにはどうしたらよいでしょうか?また
os.Exit
?
どのように解決するのですか?
runtime.Goexit()
は、それを実現する簡単な方法です。
Goexitはそれを呼び出したゴルーチンを終了させます。他のゴルーチンは影響を受けません。 Goexitはゴルーチンを終了させる前に、すべての遅延された呼び出しを実行します。 しかし、Goexitはパニックではないので、それらの遅延された関数内の任意の回復コールはnilを返します。
しかし
<ブロッククオートメインゴルーチンからGoexitを呼び出すと、func mainが戻ることなくそのゴルーチンが終了する。func mainが戻ってこないので、プログラムは他のゴルーチンの実行を継続します。他のゴルーチンがすべて終了すると、プログラムはクラッシュします。
ということで、メインゴルーチンから呼び出すと
main
の先頭に
defer os.Exit(0)
その下に、他のいくつかの
defer
ステートメントを追加して、他のゴルーチンを停止してクリーンアップするように通知します。
関連
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] goで文字列の連結を効率的に行う方法
-
[解決済み] Bashスクリプトで、ある条件が発生したらスクリプト全体を終了させるにはどうしたらいいですか?
-
[解決済み] Bash関数におけるreturnとexitの違いについて
-
[解決済み] Pythonのexit()とsys.exit()の違いについて
-
[解決済み】JavaScriptのDeferred、Promise、Futureの違いは何ですか?
-
[解決済み】トレースバックなしでPythonを終了する方法は?
-
[解決済み】複数のコマンドのBash終了状態を効率的に確認する方法
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] IntelliJでファイル保存時にgofmtを実行する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] os.Exit()とpanic()はいつ使うのか?
-
[解決済み] マップから構造体への変換
-
[解決済み] ゴルーチンのスタックトレースをダンプするには?
-
[解決済み] ユーザーのホームディレクトリを取得する
-
[解決済み] マップを含む値を順番に収集する
-
[解決済み] 空のスライスをチェックするにはどうしたらいいですか?
-
[解決済み] gc」と「gccgo」の主な相違点は何ですか?
-
[解決済み] Go で POST リクエストを送信するには?