Go言語(golang)のメソッド(method)

※当サイトではアフィリエイト広告を利用しています

目次

Go言語(golang)のメソッド(method)

メソッドの使い方を説明します。Tour of Goを参考にしています。

Go言語(golang)のメソッドの使い方

Go言語(Golang)のメソッドは、特定の型に関連付けられた関数のことです。これにより、その型のインスタンスに対して操作を行うための関数を定義できます。メソッドは、オブジェクト指向プログラミングの概念を持っていますが、Goではクラスの概念がないため、型にメソッドを関連付けることでオブジェクト指向の概念を実現しています。

以下に、簡単な例を挙げて、Go言語のメソッドをわかりやすく説明します。

package main

import "fmt"

// Person型の定義
type Person struct {
    FirstName string
    LastName  string
}

// Person型に紐づくメソッドの定義
func (p Person) FullName() string {
    return p.FirstName + " " + p.LastName
}

func main() {
    // Person型のインスタンスの生成
    person := Person{
        FirstName: "John",
        LastName:  "Doe",
    }

    // メソッドの呼び出し
    fullName := person.FullName()

    // 結果の表示
    fmt.Println("Full Name:", fullName)
}

この例では、Personという型を定義し、その型にFullNameというメソッドを関連付けています。FullNameメソッドはPerson型のインスタンスに対して呼び出すことができ、そのインスタンスのFirstNameLastNameを結合してフルネームを返します。

main関数では、Person型のインスタンスを作成し、FullNameメソッドを呼び出しています。これにより、フルネームが表示されます。

要点

  1. メソッドは関数のように見えますが、特定の型に紐づいています。
  2. メソッドの宣言では、関数名の前にメソッドが関連付けられる型(ここではPerson)とその型のインスタンスが引数として渡されるための名前(ここではp)が指定されます。
  3. メソッドの本体では、pを通じてPerson型のフィールドにアクセスできます。

Go言語(golang)のメソッドのポイントレシーバと値レシーバ

ポインタレシーバと値レシーバの違い

Goでは、メソッドのレシーバ(メソッドが関連付けられる型)は、値レシーバまたはポインタレシーバのどちらかとして指定できます。値レシーバを使用すると、メソッド内でレシーバのコピーが作成され、ポインタレシーバを使用すると、レシーバ自体が変更される可能性があります。適切な選択は、メソッドがオブジェクトのコピーを変更する必要があるかどうかに依存します。

ポインタレシーバと値レシーバの使い分け

メソッドがオブジェクトの状態を変更する必要がある場合は、ポインタレシーバを使用します。

メソッドがオブジェクトの状態を変更しない場合は、値レシーバを使用します。

ポインタレシーバの利点

ポインタレシーバを使用すると、メソッドがオブジェクトの状態を変更できます。これにより、メモリ効率が向上し、コピーが不要になります。

Go言語(golang)のtypeにメソッド宣言

例で挙げたstructの型だけではなく、任意の型(type)にもメソッドを宣言できます。

package main

import (
	"fmt"
	"math"
)

type MyFloat float64

func (f MyFloat) Abs() float64 {
	if f < 0 {
		return float64(-f)
	}
	return float64(f)
}

func main() {
	f := MyFloat(-math.Sqrt2)
	fmt.Println(f.Abs())
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

テック企業でプレイングマネージャーをしている Jun です。プログラミングの基礎をはじめ、組織やマネジメントについてブログを書いています。ハードスキル、ソフトスキルどちらも磨きたい方を対象にしています。一緒に学んで人生を楽しくしていきましょう!

目次