ホームページ  >  記事  >  Go言語のfnとは何ですか?

Go言語のfnとは何ですか?

小老鼠
小老鼠オリジナル
2023-04-17 11:46:512241ブラウズ

Go 言語では、fn は特にキーワード func を指します。関数の基本コンポーネントは、キーワード func、関数名、パラメータ リスト、戻り値、関数本体、および return ステートメントです。各プログラムには多くの関数が含まれています、関数はコードの基本ブロックであり、単一または関連する関数を実装するために使用される、編成された再利用可能なコード セグメントです。

Go言語のfnとは何ですか?

このチュートリアルのオペレーティング システム: Windows 10 システム、GO バージョン 1.20、Dell G3 コンピューター

Go 言語の関数宣言 (関数定義 )

関数は、単一関数または関連関数を実装するために使用される、整理された再利用可能なコード セグメントであり、アプリケーションのモジュール性とコードの再利用を向上させることができます。 Go言語では通常関数、匿名関数、クロージャがサポートされており、設計から最適化・改良され、より使いやすくなりました。

関数はコード実行の論理構造を構成します。Go 言語では、関数の基本コンポーネントは次のとおりです: キーワード func、関数名、パラメータ リスト、戻り値、関数本体、return ステートメント。各プログラムには多くの要素が含まれます。関数と関数はコードの基本ブロックです。

Go 言語はコンパイル言語であるため、関数を記述する順序は関係ありません。可読性の要件を考慮すると、main() 関数を先頭に記述するのが最善です。ファイルと他の関数は、特定の論理順序 (関数が呼び出される順序など) で書き込みに従います。

複数の関数を記述する主な目的は、多くのコード行を必要とする複雑な問題を、解決するための一連の単純なタスクに分解することです。さらに、同じタスク (関数) を複数回呼び出すことができるため、コードの再利用 (実際、優れたプログラムは、DRY 原則、つまり Don'trepeat Yourself (自分自身を繰り返さない) に細心の注意を払っています。これは、特定のタスクを実行するコードはプログラム内で 1 回しか出現できないことを意味します) 。

関数は、コード ブロックの最後の行または return ステートメントの前に到達すると終了します。return ステートメントには 0 個以上のパラメーターを含めることができます。これらのパラメーターは呼び出し元の戻り値として使用されます。シンプル return ステートメントは、for の無限ループを終了したり、コルーチン (ゴルーチン) を終了したりするためにも使用できます。

Go 言語関数は宣言する必要はありません

Go 言語関数は第一級市民であり、変数と同様に特定の変数に代入できます (その理由は匿名関数の出現のため)

関数は第一級市民であるため、過去に変数の定義に使用されたすべての形式を関数型の変数の定義に使用できます

    var 变量名称 函数类型
    var 变量名称 函数类型 = 匿名函数
    var 变量名称  = 匿名函数
    变量名称  := 匿名函数
    var(
        var 变量名称  = 匿名函数
    )
fn = func (a,b int){
    return a + b
}
fn()

Go 言語での関数変数の定義は C 言語とは異なります。

形式: func 関数名 (パラメータ リスト) 戻り値リスト{}

Go 言語での関数の戻り値は、次の値を超えることができます。 1 つの

func test(a,b int) (a,b int){
    return a,b
}

Go 言語関数の戻り値は書き込み型のみですが、変数型を記述することもできます

書き込み専用型: func test(a,b int) (int){} 注: 書き込み専用型、戻り値型 int の両側の括弧は省略可能

変数プラス型: func test(a,b int) (a,b int){}
注: 変数型の形式を記述する場合、return は戻り値を追加する必要がなく、コードブロック内で自動的に を見つけます。 Go 言語の仮パラメータリストまたは戻り値リストの型が b

func test(a,b int) (a,b int){
      a = 100
      b = 99
      return //自动返回100,99}
# と同じ場合## の場合、引き続き

を次のように定義できます。 2 つの関数は同じメソッドを表します

func test(a,b int) (a,b int){return a,b}
func test2(a int,b int) (int,int){return a,b}

Go 言語の関数では複数の戻り値が存在する可能性があるため、外部関数が複数の戻り値を受け取ると、受け取りには複数の変数を使う必要がありますが、Go言語では変数を使わないとエラーが報告されるので、使わなくてもよい戻り値がある場合は_で受け取り、_はGo 言語では特定の意味を持つため、変数の識別子として使用することはできません

匿名関数

匿名関数は名前のない関数です。定義後すぐに使用する必要があります。そうでない場合はエラーが報告されます。

匿名関数は通常 1 回のみ使用されます。これらは第一級市民であるため、関数の仮パラメータまたは戻り値として使用できます関数の

#関数として 仮パラメータ

fn  := func (a,b int) int {
  return a + b
}

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,fn)

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}

さらなる進化

fn と は匿名関数代入であるため、匿名関数を test

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,func (a,b int) int {
  return a + b
})

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}
に直接渡すことができます。関数の戻り値としての

fn := test()
fn()//打印匿名函数

func test() func() {
    return func() {
        fmt.Println("匿名函数")
    }
}

クロージャ (特別な匿名関数)

返された匿名関数で外部変数が使用されている場合、それはクロージャと呼ばれます

クロージャの特徴: 「人がいる」 返された匿名関数内で外部変数が使用されている限り、関数呼び出し後も匿名関数が使用されている場合、関数スタックは解放されません。使用されなくなったら、関数スタックが解放されます。

fn := test()//test函数也被称为迭代器
fn()  //2
fn()  //3
fn()  //4

func test() func(){
     x := 1
     return func (){
            x++
            println(x)
        }
}

匿名関数のメモリ パフォーマンス

Go言語のfnとは何ですか?

図解

  1. コード領域1 つのアドレスに対応する 3 つの関数のコードを格納します。

  2. #変数 fn を定義し、無名関数のアドレスを fn に渡します。
  3. ##ストレージ スペースを開くための関数テスト
  4. #num、value、method、res のストレージ スペースをオープンします。メソッドは、渡された関数のアドレスを保存します。

  5. 関数を実行すると、メソッドは匿名関数のアドレスを保存します。メソッドが実行されると、記憶領域が開かれ、a と b の値が保存されます。関数終了後の値は、 res に返され、メソッドのストレージ領域が解放されます。

  6. Res が出力され、test 関数も解放され、使用後に fn も解放されます

以上がGo言語のfnとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。