ホームページ > バックエンド開発 > Golang > Go言語で関数を呼び出す方法は何ですか?

Go言語で関数を呼び出す方法は何ですか?

青灯夜游
リリース: 2022-12-01 19:32:00
オリジナル
6840 人が閲覧しました

Go言語では関数を定義した後、「関数名()」で関数を呼び出すことができ、その構文は「戻り値変数リスト = 関数名(パラメータリスト)」となります。 「()」内に複数のパラメータが含まれる場合、パラメータ変数はカンマで区切られ、セミコロンで終わる必要はありません。「戻り値変数リスト」では、複数の戻り値はカンマで区切られます。

Go言語で関数を呼び出す方法は何ですか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

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

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

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

関数がコード ブロックの最後の行まで実行される場合 } 関数は return ステートメントの前に終了します。return ステートメントには 0 個以上のパラメーターを含めることができ、これらのパラメーターは次のように使用されます。呼び出し側が使用する単純な return ステートメントは、for の無限ループを終了したり、ゴルーチンを終了したりするためにも使用できます。

Go 言語には 3 種類の関数があります:

  • 名前付きの通常の関数
  • 匿名関数またはラムダ関数
  • メソッド

通常の関数宣言(定義)

関数宣言には、関数名、仮引数リスト、戻り値リスト(省略可)、関数本体が含まれます。

func 函数名(形式参数列表)(返回值列表){
    函数体
}
ログイン後にコピー

正式パラメータ リストは、関数のパラメータ名とパラメータ タイプを記述します。これらのパラメータはローカル変数として使用され、その値はパラメータ呼び出し元によって提供されます。戻り値リストは、変数名を記述しますおよび関数の戻り値の型 関数が名前のない変数を返すか、戻り値を返さない場合 戻り値リスト内の括弧は省略できます。

関数の呼び出し

関数が定義された後、呼び出しによって、現在のコードを呼び出された関数にジャンプして実行することができます。呼び出し前の関数はローカルです。変数は次のようになります。呼び出された関数の実行が終了すると、呼び出し関数の次の行に戻り、コードの実行が続行されます。以前のローカル変数にも引き続きアクセスできます。

関数内のローカル変数は関数本体内でのみ使用できます。関数呼び出しが完了すると、これらのローカル変数は解放され、無効になります。

Go 言語の関数呼び出し形式は次​​のとおりです。

返回值变量列表 := 函数名(参数列表)
ログイン後にコピー

以下、各部の説明です。

  • 関数名: 関数の名前それを呼び出す必要があります。
  • パラメータ リスト: パラメータ変数はカンマで区切られており、セミコロンで終わる必要はありません。
  • 戻り値変数リスト: 複数の戻り値はカンマで区切られます。

たとえば、加算関数の呼び出しスタイルは次のとおりです。

result := add(1,1)
ログイン後にコピー

関数の戻り値

Go 言語は複数の関数をサポートしています。戻り値、複数の戻り値 関数実行後に複数の戻り値を取得するのは簡単です Go言語では、関数実行中に発生する可能性のあるエラーを返すために、複数の戻り値の最後の戻り値を使用することがよくあります サンプルコードは次のとおりです:

conn, err := connectToNetwork()
ログイン後にコピー
rree

在这段代码中,connectToNetwork 返回两个参数,conn 表示连接对象,err 返回错误信息。

其它编程语言中函数的返回值

  • C/C++ 语言中只支持一个返回值,在需要返回多个数值时,则需要使用结构体返回结果,或者在参数中使用指针变量,然后在函数内部修改外部传入的变量值,实现返回计算结果,C++ 语言中为了安全性,建议在参数返回数据时使用“引用”替代指针。
  • C# 语言也没有多返回值特性,C# 语言后期加入的 ref 和 out 关键字能够通过函数的调用参数获得函数体中修改的数据。
  • lua 语言没有指针,但支持多返回值,在大块数据使用时方便很多。

Go语言既支持安全指针,也支持多返回值,因此在使用函数进行逻辑编写时更为方便。

1) 同一种类型返回值

如果返回值是同一种类型,则用括号将多个返回值类型括起来,用逗号分隔每个返回值的类型。

使用 return 语句返回时,值列表的顺序需要与函数声明的返回值类型一致,示例代码如下:

func typedTwoValues() (int, int) {
    return 1, 2
}
func main() {
    a, b := typedTwoValues()
    fmt.Println(a, b)
}
ログイン後にコピー
ログイン後にコピー

代码输出结果:

1 2
ログイン後にコピー

纯类型的返回值对于代码可读性不是很友好,特别是在同类型的返回值出现时,无法区分每个返回参数的意义。

2) 带有变量名的返回值

Go语言支持对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。

命名的返回值变量的默认值为类型的默认值,即数值为 0,字符串为空字符串,布尔为 false、指针为 nil 等。

下面代码中的函数拥有两个整型返回值,函数声明时将返回值命名为 a 和 b,因此可以在函数体中直接对函数返回值进行赋值,在命名的返回值方式的函数体中,在函数结束前需要显式地使用 return 语句进行返回,代码如下:

func namedRetValues() (a, b int) {
    a = 1
    b = 2
    return
}
ログイン後にコピー
ログイン後にコピー

代码说明如下:

  • 第 1 行,对两个整型返回值进行命名,分别为 a 和 b。
  • 第 3 行和第 4 行,命名返回值的变量与这个函数的布局变量的效果一致,可以对返回值进行赋值和值获取。
  • 第 6 行,当函数使用命名返回值时,可以在 return 中不填写返回值列表,如果填写也是可行的,下面代码的执行效果和上面代码的效果一样。
    func namedRetValues() (a, b int) {
        a = 1
        return a, 2
    }
    ログイン後にコピー
    ログイン後にコピー

提示

同一种类型返回值和命名返回值两种形式只能二选一,混用时将会发生编译错误,例如下面的代码:

func namedRetValues() (a, b int, int)
ログイン後にコピー
ログイン後にコピー

编译报错提示:

mixed named and unnamed function parameters
ログイン後にコピー

意思是:在函数参数中混合使用了命名和非命名参数。

【相关推荐:Go视频教程

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート