8.GOの組み込み関数

ステートメントを延期する

 元のリンク: Go 言語に基づく関数 | Li Wenzhou のブログ

defer は、後続のステートメントの処理を遅らせることです。

重要: defer が遅延する関数を登録する場合、関数のすべてのパラメーターの値を決定する必要があります。

例えば:

func Defer() {
	defer fmt.Println(1)
	defer fmt.Println(2)
	fmt.Println(3)
	defer fmt.Println(4)
}

//output
3
4
2
1

 Go 言語の関数では、returnステートメントは最下位レベルのアトミックな操作ではなく、戻り値の代入と RET 命令の 2 つのステップに分かれています。deferステートメントの実行タイミングは、戻り値代入演算後、RET 命令実行前です詳細を次の図に示します。

いくつかの組み込み関数 

 パニック/回復

エラー報告の設定にはpanicを使用します。エラーが発生すると思われる場所にpanicを設定できます。

例:

func Panic() {
	fmt.Println("A")
	panic("B")
	fmt.Println("C")
}

//output
A
panic: B

goroutine 1 [running]:
study/neizhihanshu.Panic()
        D:/Project/GoLang/go_study/neizhihanshu/nzhs.go:17 +0x65
main.main()
        D:/Project/GoLang/go_study/main.go:87 +0x17

进程 已完成,退出代码为 2

リカバリーによりプログラムを復元できます。

func Recover() {
	fmt.Println("A")
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	panic("B")
	fmt.Println("C")
}
//output
A
B

进程 已完成,退出代码为 0

リカバリはパニックの前にエラーをインターセプトすることしかできませんが、後でエラーを防ぐことはできません。

func Recover() {
	fmt.Println("A")
	panic("B")
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	fmt.Println("C")
}

//output
A
panic: B

goroutine 1 [running]:
study/neizhihanshu.Recover()
        D:/Project/GoLang/go_study/neizhihanshu/nzhs.go:27 +0x6a
main.main()
        D:/Project/GoLang/go_study/main.go:87 +0x17

进程 已完成,退出代码为 2

おすすめ

転載: blog.csdn.net/qq_48480384/article/details/130220685