📗
GOを1から学ぶ #6
初めに
こんにちは!技術スタック的には、フロントよりですが、GOを学ぶ機会があったので、その記録を取りたいと思いこの記事を書いてます。(初心者のため優しい目で見てください)
今回は、以下について簡単にまとめます。
- メソッドについて
メソッドを作成する
基本的な構文
func (レシーバ名 レシーバ型) メソッド名(引数) 戻り値型 {
// 処理
}
具体的な例
package main
import (
"fmt"
)
// 構造体の定義
type Person struct {
Name string
Age int
}
// 値レシーバのメソッド(データを読み取るだけ)
func (p Person) Greet() {
fmt.Printf("こんにちは、私は%sです。年齢は%d歳です。\n", p.Name, p.Age)
}
// ポインタレシーバのメソッド(データを書き換える)
func (p *Person) Birthday() {
p.Age += 1
}
func main() {
p := Person{Name: "太郎", Age: 20}
p.Greet()
p.Birthday()
p.Greet()
}
実行結果
こんにちは、私は太郎です。年齢は20歳です。
こんにちは、私は太郎です。年齢は21歳です。
値レシーバとポインタレシーバの違い
レシーバの種類 | 説明 |
---|---|
値レシーバ func (p Person)
|
コピーされた値が使われる(元の構造体は変更されない) |
ポインタレシーバ func (p *Person)
|
元の構造体へのポインタが使われる(データを変更可能) |
基本的に構造体の中身を変更したいときはポインタレシーバを使います。
Discussion