Go言語の関数とメソッドの違いは何ですか

王林
リリース: 2023-01-13 00:21:45
オリジナル
5384 人が閲覧しました

Go 言語における関数とメソッドの違い: 通常の関数の場合、レシーバーが値型の場合、ポインタ型のデータを直接渡すことはできませんが、メソッドの場合、レシーバーが値型の場合、ポインタ型のデータを直接渡すことはできません。ポインタ型は変数呼び出しメソッドを直接利用できます。

Go言語の関数とメソッドの違いは何ですか

#この記事の動作環境: Windows10 システム、Go 1.11.2、thinkpad t480 コンピューター。

関数とメソッドの違いの公式説明: メソッドは、レシーバーを含む関数です。レシーバは、名前付き型、構造型、またはポインタの値にすることができます。特定のタイプのすべてのメソッドは、そのタイプのメソッド セットに属します。

相違点:

1. 通常の関数の場合: レシーバ (関数パラメータ) が値型の場合、ポインタ型のデータを直接渡すことはできません。また、その逆も同様です。

func function_name([parameter list]) [return_types] {
   函数体
}
ログイン後にコピー

2. メソッド (構造体メソッドなど) の場合: レシーバーが値型の場合、ポインター型変数を使用してメソッドを直接呼び出すことができ、その逆も可能です。メソッドと関数を参照してください 違いは、 func キーワードの後のメソッドが関数名ではなくレシーバーであることです。レシーバーは自分で定義した型にすることができます。この型は、構造体、インターフェイス、または基本的なデータ型を再定義することもできます。

Go 関数

関数は、タスクを実行するために使用されるコードの基本ブロックです。

Go 言語には少なくとも main() 関数があります。

関数を使用してさまざまな関数を分割できます。論理的には、各関数は指定されたタスクを実行します。

関数宣言は、関数の名前、戻り値の型、パラメーターをコンパイラーに伝えます。

Go 関数は複数の値を返すことができます。

Go 言語の標準ライブラリには、使用できるさまざまな組み込み関数が用意されています。たとえば、len() 関数はさまざまな型の引数を受け入れ、その型の長さを返すことができます。文字列を渡した場合は文字列の長さが返され、配列を渡した場合は配列に含まれる要素の数が返されます。

1. 値の転送: 値の転送とは、関数を呼び出すときに実際のパラメーターのコピーを関数にコピーすることを指します。これにより、関数内でパラメーターが変更されても、実際のパラメーターは影響を受けません。

2. 参照渡し: 参照渡しとは、関数呼び出し時に実パラメータのアドレスを関数に渡すことを意味し、関数内のパラメータを変更すると実パラメータに影響を与えます。

Go メソッド

Go 言語には関数とメソッドの両方があります。メソッドは、名前付き型、構造型、またはポインターの値であるレシーバーを含む関数です。特定のタイプのすべてのメソッドは、そのタイプのメソッド セットに属します。

次は、構造体のタイプとこのタイプのメソッドを定義します:

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函数体*/
   }
ログイン後にコピー

(学習ビデオ共有:

プログラミング入門

)

以上 コードの実行結果は次のとおりです:

package mainimport (   "fmt"  )/* 定义结构体 */type Circle struct {
  radius float64
}func main() {  var c1 Circle
  c1.radius = 10.00
  fmt.Println("Area of Circle(c1) = ", c1.getArea())
}//该 method 属于 Circle 类型对象中的方法func (c Circle) getArea() float64 {  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * c.radius * c.radius
}
ログイン後にコピー

Example

Area of Circle(c1) =  314
ログイン後にコピー

関連する推奨事項:

golang チュートリアル

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

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