ホームページ  >  記事  >  バックエンド開発  >  Go言語関数の紹介

Go言語関数の紹介

尚
転載
2019-11-30 14:52:232224ブラウズ

Go言語関数の紹介

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 サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。