【Go】閉パック&Defer&Error
閉包/Defer/Error
Google開発専門家はあなたを連れてAIを学びます:実戦(Keras/Tensorflow)(付源コード)に入門します
基本的な説明:閉パッケージは、関数とそれに関連する参照環境からなる全体(エンティティ)です.
AddUpper()は関数であり、返されるデータ型はfunc(int)intである. 閉パケットの説明:プレゼンテーション中の匿名関数に戻る関数であるが、この匿名関数は関数外のリソースnに参照されるため、匿名関数とnは全体として形成され、閉パケットを構成する. は、閉パケットはクラスであり、この関数はメソッドであり、nは変数であると理解できる. addUpperを繰り返し呼び出すと,nは一度初期化され,累積を構成する. パッケージを閉じる鍵は、返される関数がどの変数を参照しているかです.
関数では、プログラマは常にリソース(データベース接続、ファイルハンドル、ロックなど)を作成する必要があります.関数の実行が完了した後、リソースをタイムリーに解放するために、Goの設計者はdefer(遅延メカニズム)を提供します.
実行結果は次のとおりです.
Deferの価値関数の実行が完了すると、関数によって作成されたリソースをタイムリーに解放できます.
実行結果は次のとおりです.
例外の処理方法は次のとおりです. defer+recoverを使用して異常をキャプチャし、 を処理する.
Goでは、エラーをカスタマイズすることができ、一般的にerrorsを用いる.New("")/panic("")
Google開発専門家はあなたを連れてAIを学びます:実戦(Keras/Tensorflow)(付源コード)に入門します
クローズドパッケージ
紹介する
基本的な説明:閉パッケージは、関数とそれに関連する参照環境からなる全体(エンティティ)です.
ケーススタディ
//
func AddUpper() func( int ) int {
var n int = 10 ;
return func(i int) int {
n = n + i
return n
}
}
func main() {
//
addUpper := function.AddUpper()
fmt.Println(addUpper(1))
fmt.Println(addUpper(2))
}
説明
Deferの理解
紹介する
関数では、プログラマは常にリソース(データベース接続、ファイルハンドル、ロックなど)を作成する必要があります.関数の実行が完了した後、リソースをタイムリーに解放するために、Goの設計者はdefer(遅延メカニズム)を提供します.
ケーススタディ
func Sum(x , y int) int{
// defer , defer ,
defer fmt.Println("x = " , x)
// , defer
defer fmt.Println("y = " , y)
res := x + y
fmt.Println("res = " , res)
return res
}
func main() {
sum := function.Sum(10, 20)
fmt.Println("sum = " , sum)
}
実行結果は次のとおりです.
res = 30
y = 20
x = 10
sum = 30
Deferの価値関数の実行が完了すると、関数によって作成されたリソースをタイムリーに解放できます.
GOでのエラーの処理方法
実例
func ErrorTest(){
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println(res)
}
実行結果は次のとおりです.
panic: runtime error: integer divide by zero
goroutine 1 [running]:
go-learn/src/function.ErrorTest()
D:/Projects/GoProjects/go-learn/src/function/error.go:13 +0x11
main.main()
D:/Projects/GoProjects/go-learn/main.go:11 +0x27
例外の処理方法は次のとおりです.
func ErrorTest(){
defer func() {
err := recover()
if err != nil {
fmt.Println("err = " , err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println(res)
}
カスタムエラー
Goでは、エラーをカスタマイズすることができ、一般的にerrorsを用いる.New("")/panic("")