1. ホーム
  2. function

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

2023-08-30 10:21:51

質問

Goを始めようとしているのですが、その際に ドキュメント は非常に優れています。私がドキュメントで見つけられなかったのは、関数とメソッドの違いです。

私が理解している限りでは、関数は "global" で、つまり、関数を使うためにパッケージをインポートする必要はなく、常にそこにあります。メソッドはパッケージにバインドされています。これは正しいですか?

どのように解決するのですか?

<ブロッククオート

私が理解している限りでは、関数はグローバルで、関数を使用するためにパッケージをインポートする必要はなく、常に存在します。メソッドはパッケージにバインドされています。これは正しいですか?

いいえ、それは正しくありません。の関数がいくつかあるだけです。 ビルトイン パッケージの関数のうち、常に利用可能なものがいくつかあります。それ以外のものはすべてインポートする必要があります。

メソッドという用語は、オブジェクト指向プログラミングで登場しました。オブジェクト指向言語(例えばC++)では、データや関数をカプセル化したクラスを定義することができます。クラスの中のこれらの関数はメソッドと呼ばれ、そのメソッドを呼び出すにはそのクラスのインスタンスが必要です。

Go は古典的な意味での OOP 言語ではありませんが、Go でも用語は基本的に同じです。Goでは、レシーバーを取る関数は通常メソッドと呼ばれます(おそらく、人々がまだOOPの用語に慣れているからでしょう)。

ですから、例えば

func MyFunction(a, b int) int {
  return a + b
}
// Usage:
// MyFunction(1, 2)

しかし

type MyInteger int
func (a MyInteger) MyMethod(b int) int {
  return a + b
}
// Usage:
// var x MyInteger = 1
// x.MyMethod(2)