📗

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