Golang はオブジェクト指向プログラミングをサポートする言語で、実際の開発ではポインタやメソッドがよく使われます。ポインタは、変数のメモリ アドレスを格納する変数です。メソッドは型を指定する関数です。 Golang ではポインター メソッドと非ポインター メソッドの違いがあります。この記事では、これら 2 つのメソッドの違いと使用法について説明します。
1. ポインタ メソッド
ポインタ メソッドは、構造体ポインタにバインドされたメソッドです。ポインター メソッドには次の特性があります。
たとえば、構造体のタイプを定義します:
type Rectangle struct { width float64 height float64 }
ポインター メソッドを使用して、この構造体のインスタンスを変更できます:
func (r *Rectangle) SetProperty(width, height float64) { r.width = width r.height = height }
上記のメソッドでは、Receiver (r *Rectangle)
は Rectangle 構造体へのポインターです。このメソッドは、Rectangle のプロパティを設定するために使用されます。
2. 非ポインター メソッド
非ポインター メソッドは、構造体にバインドされたメソッドです。構造体のコピーをレシーバー パラメーターとして受け入れます。非ポインター メソッドには、次の特徴:
たとえば、構造体のタイプを定義します:
type Rectangle struct { width float64 height float64 }
非ポインター メソッドを使用して構造体の面積を計算できます:
func (r Rectangle) GetArea() float64 { return r.width * r.height }
In上記のメソッドでは、受信側 r Rectangle
は Rectangle 構造体の値のコピーです。このメソッドは、長方形の面積を返します。
3. ポインター メソッドと非ポインター メソッドの違い
たとえば、ポインタ メソッドを使用して構造を変更できます:
func main() { rect := Rectangle{width: 10, height: 5} fmt.Println("Width:", rect.width, "Height:", rect.height) rect.SetProperty(20, 10) fmt.Println("Width:", rect.width, "Height:", rect.height) }
出力結果:
Width: 10 Height: 5 Width: 20 Height: 10
4. まとめ
Golang の場合このうち、ポインター メソッドと非ポインター メソッドには、それぞれ長所、短所、使用シナリオがあります。メソッドを定義するときは、オブジェクトの使用法とビジネス ニーズを考慮し、コードを記述する適切なメソッドを選択する必要があります。両方の方法を適切に使用すると、コードの可読性とパフォーマンスが向上します。
以上がgolang ポインタメソッドの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。