Golang-12:メソッド


メソッド形式


funcに回収器を追加明記
次のfunc後部(d duck)部分はトランシーバである.
ここで、ポインタまたは受信値としてトランシーバを受信する場合がある
ポインタを受信すると、トランシーバの値が変更される可能性があります.
そうでなければ、値段を言えばいいです.

レジ台

package main

import "fmt"

type Duck struct {
	Name  string
	Age   int
	Sound string
}

func (d Duck) String() string {	// 메서드
	return fmt.Sprintf("%s, age %d, sound is %s ", d.Name, d.Age, d.Sound)
}

func main() {
	d := Duck{
		"오리",
		13,
		"꽥꽥",
	}
	fmt.Println(d.String())
}

Console



ポインタトランシーバ

package main

import "fmt"

type Duck struct {
	Name  string
	Age   int
	Sound string
}

func (d Duck) String() string {
	return fmt.Sprintf("%s, age %d, sound is %s ", d.Name, d.Age, d.Sound)
}

func (d *Duck) AddYear(i int) {	// 포인터 리시버
	d.Age = d.Age + i
}

func main() {
	d := Duck{
		"오리",
		13,
		"꽥꽥",
	}
	d.AddYear(5)	// Age에 5를 더한다.
	
	fmt.Println(d.String())
}

Console



Age値が5増加していることがわかる.