0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語 レシーバ

Posted at

レシーバとは

Go言語における「レシーバ (Receiver)」は、他の言語でよく見られる「this」や「self」といったキーワードに相当する。Goのメソッド内でレシーバを介して構造体のメンバー変数やメソッドにアクセスすることができる。

例えばjavaの場合、クラスのメソッド内でクラスのメンバー変数にアクセスするためには this キーワードを使用します。Goにおけるメソッドではレシーバがその役割を果たし、構造体のフィールドやメソッドにアクセスするために利用される。

java / Go での比較

java
public class MyClass {
    private int value;

    public void setValue(int newValue) {
        this.value = newValue; // "this"を使ってメンバー変数にアクセス
    }
}

go
package main

import "fmt"

type MyClass struct {
    value int
}

func (m *MyClass) SetValue(newValue int) {
    m.value = newValue // レシーバを使ってメンバー変数にアクセス
}

func main() {
    obj := MyClass{}
    obj.SetValue(42)
    fmt.Println(obj.value)
}

レシーバーの種類

値レシーバ
func (m MyClass) methodName() {
    // 構造体がコピーが渡される。
    // メソッド内での変更が元の構造体に影響を与えない。
}
ポインタレシーバ
func (m *MyClass) methodName() {
    // 構造体へのポインタが渡される。
    // メソッド内での変更が元の構造体に影響を与える。
}

構造体を参照しない場合

構造体を参照しない
func (MyClass) methodName() {
    // メソッド内でレシーバを使わない
    // Goの構文上、必ずレシーバを指定(記述)する必要がある。
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?