Go 関数と他の言語の違い
1. 関数の形式の違い
func GetMsg(i int) (r string) { fmt.Println(i) r = "hi" return r }
func は、これがFunction
GetMsg は関数名です
(i int) 関数は int パラメータを受け取ります
(r string) 関数は文字列型の戻り値を返します
2. 関数は複数の戻り値を返すことができます
これは c や php とは異なりますが、lua
func GetMsg(i int) (r string, err string) { fmt.Println(i) r = "hi" err = "no err" return r,err }
3 と同じです。defer の使用
defer は「関数の終了時に呼び出される」という意味で、特にファイルの読み取りおよび書き込みの場合、開いた後に閉じる操作を呼び出し、閉じる操作には defer
を使用する必要があります。 ## とは、file.Open の直後に close を呼び出すのではなく、 false が返されたときに file.Close() を呼び出すことを意味し、これにより C 言語におけるメモリ リークの問題を効果的に回避できます。 #4. 理解するのがさらに難しい: パニック、リカバリ、遅延#defer: 推奨: go defer (遅延実行機能) の紹介
Panic と Recover は他言語の throw と catch とみなします
次の例:func ReadFile(filePath string)(){ file.Open(filePath) defer file.Close() if true { file.Read() } else { return false } }Returned:
ackage main import "fmt" func main() { f() fmt.Println("Returned normally from f.") } func f() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() fmt.Println("Calling g.") g(0) fmt.Println("Returned normally from g.") } func g(i int) { if i > 3 { fmt.Println("Panicking!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Defer in g", i) fmt.Println("Printing in g", i) g(i + 1) }Panic throw 情報が出力され、関数は終了します。 Recover は情報を受信し、処理を続行します。 推奨:
go 言語チュートリアル
以上がGo言語関数の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。