ホームページ よくある問題 Go言語のfnとは何ですか?

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

Apr 17, 2023 am 11:46 AM
golang 言語を移動

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Apr 02, 2025 pm 02:15 PM

VSCODEユーザーのGolang Generic Function Typeの制約の自動削除は、VSCODEを使用してGolangコードを書くときに奇妙な問題に遭遇する可能性があります。いつ...

マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? Apr 02, 2025 pm 03:51 PM

マルチプロセスのログライティングの並行性セキュリティの問題を効率的に処理します。複数のプロセスが同じログファイルを同時に書き込みます。並行性が安全で効率的であることを確認する方法は?これは...

Golandのカスタム構造ラベルが有効になっていないという問題を解決する方法は? Golandのカスタム構造ラベルが有効になっていないという問題を解決する方法は? Apr 02, 2025 pm 12:51 PM

GoLandを使用する場合のGolandのカスタム構造タグの問題に関して、Go Language Developmentに使用する場合、いくつかの構成の問題に遭遇することがよくあります。それらの1つは...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Golangを使用してキャディーのような背景の実行、停止、リロード機能を実装する方法は? Golangを使用してキャディーのような背景の実行、停止、リロード機能を実装する方法は? Apr 02, 2025 pm 02:12 PM

Golangで機能をバックグラウンドランニング、停止、リロードする方法は?プログラミングプロセス中に、バックグラウンド操作を実装して停止する必要があることがよくあります...