Go 言語のメソッド レシーバーは、他のプログラミング言語のメソッド レシーバーとは異なります。 Go 言語の場合: メソッド レシーバーは、関数名の直後の関数シグネチャ内にあります。メソッド レシーバーはポインターではなく値であるため、より軽量になります。
さまざまな言語のメソッド レシーバーと Go 言語のメソッド レシーバー
オブジェクト指向プログラミングでは、メソッド レシーバーを使用して定義を行うことができます。特定のオブジェクトを操作するメソッド。メソッド レシーバーの構文と使用法は言語によって異なる場合があります。この記事では、さまざまな言語のメソッド レシーバーと Go 言語のメソッド レシーバーの違いについて説明します。
Java
Java では、メソッド レシーバーを this
キーワードと呼びます。これは、メソッドが呼び出されるオブジェクトを参照します。
class MyClass { public void myMethod() { System.out.println(this); // 打印调用该方法的对象 } }
Python
Python では、メソッド レシーバーはメソッドの最初のパラメーターです。これは、self
と呼ばれることがよくあります。
class MyClass: def my_method(self): print(self) # 打印调用该方法的对象
C
C では、メソッド レシーバーは暗黙の最初の引数としてメソッドに渡されます。 this
キーワードを使用してアクセスします。
class MyClass { public: void myMethod() { std::cout << this; // 打印调用该方法的对象 } };
Go
Go 言語のメソッド レシーバーは、他の言語とは大きく異なります。メソッド レシーバーは、関数シグネチャ内の関数名の直後にあります。
type MyClass struct { // 字段 } func (myClass MyClass) myMethod() { // 实现 }
Go 言語では、メソッド レシーバーはポインターではなく値です。これにより、Go のメソッド レシーバーがより軽量になり、null ポインター チェックが回避されます。
実践的なケース
以下は、Go 言語と Python で同様のメソッドを実装する例です。
Go 言語:
type Person struct { Name string } func (p Person) Greet() { fmt.Printf("Hello, %s!\n", p.Name) }
Python:
class Person: def __init__(self, name): self.name = name def greet(self): print("Hello, {}!".format(self.name))
ご覧のとおり、Go 言語のメソッド レシーバーは、オブジェクトへの明示的な参照を必要としないため、より簡潔です。
結論 (要望に応じて削除)
以上が異なる言語のメソッドレシーバーとGo言語のメソッドレシーバーの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。