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

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

Dec 01, 2022 pm 07:32 PM
gogolang言語を移動

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)
}
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
}
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) {
        a = 1
    
        return a, 2
    }

提示

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

func namedRetValues() (a, b int, int)
func namedRetValues() (a, b int, int)

编译报错提示:

mixed named and unnamed function parameters

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

【相关推荐:Go视频教程

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

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

goisastrongchoiceforprojectsingingingimplicity、andconcurrency、butmaylackinadvencedecosystemmaturity.1)

他の言語の静的イニシャル化装置に移動するinit関数を比較する他の言語の静的イニシャル化装置に移動するinit関数を比較するApr 28, 2025 am 12:16 AM

go'sinit functionandjava'sstaticInitializerserserservetosetupenmentseforeThemainfunction、buttheydifferinexecution andcontrol.go'sinitissimpleandpleandpleandautomatic、suftable forbasicasiccicsiccicsiccicsicciscicsupsupsbutsbutcanleadeadcoMplecticaticifoverseforedifuredifuredifuredifuredifuredifuredifuredifuredifuredifuredifured

goのinit関数の一般的なユースケースgoのinit関数の一般的なユースケースApr 28, 2025 am 12:13 AM

fortheInit functioningoareの場合:1)configurationfilesbemainprogramstarts、2)初期化Globalvariables、および3)running-checksSorvalidationseforetheprogramprocutess.theinitistomationaledemainforeThemainfunction、Makin

GOのチャネル:ゴルチン間コミュニケーションのマスターGOのチャネル:ゴルチン間コミュニケーションのマスターApr 28, 2025 am 12:04 AM

cannelsElcialing of renablingsefientive communication betweengoroutines

GOのラッピングエラー:エラーチェーンにコンテキストを追加しますGOのラッピングエラー:エラーチェーンにコンテキストを追加しますApr 28, 2025 am 12:02 AM

GOでは、エラーをラップし、エラーを介してコンテキストを追加できます。 1)エラーパッケージの新機能を使用して、エラーの伝播中にコンテキスト情報を追加できます。 2)fmt.errorfおよび%wを介してエラーをラッピングして問題を見つけるのを手伝ってください。 3)カスタムエラータイプは、より多くのセマンティックエラーを作成し、エラー処理の表現力を高めることができます。

GOで開発する際のセキュリティ上の考慮事項GOで開発する際のセキュリティ上の考慮事項Apr 27, 2025 am 12:18 AM

goooffersbustfeaturesforsecurecoding、butdevelopersmustimplementsecuritybestpracticive.1)usego'scryptageforsecuredathing.2)surncurrencywithranciationwithranizationprimitivestopreventraceconditions.3)sanitexe zeexerinputeterinpuptoravoidsqlinj

Goのエラーインターフェイスを理解しますGoのエラーインターフェイスを理解しますApr 27, 2025 am 12:16 AM

Goのエラーインターフェイスは、TypeErrorInterface {error()String}として定義され、エラー()メソッドを実装する任意のタイプをエラーと見なすことができます。使用の手順は次のとおりです。1。iferr!= nil {log.printf( "anerroroccurred:%v"、err)return}などのエラーを基本的にチェックおよびログエラー。 2。TypeMyErrorStruct {MSGSTRINGDETAILSTRING}などのより多くの情報を提供するカスタムエラータイプを作成します。 3.エラーラッパー(GO1.13以降)を使用して、元のエラーメッセージを失うことなくコンテキストを追加する、

同時GOプログラムでのエラー処理同時GOプログラムでのエラー処理Apr 27, 2025 am 12:13 AM

Effectivitive Handleerrorsinconconconcurentgoprograms、usechannelstocommunicateerrors、Implienterrorwatchers、Sunidertimeouts、usebufferedchannels、およびprovideclearerrormess.1)usechannelstopasserrors fromgoroutineStothemainctunction.2)Anerrorwatcherを実装します

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール