カテゴリ: Go言語 更新日: 2025/07/29

Go言語のメソッドと関数の違いとは?構造体メソッドの仕組みを学ぼう

Go言語のメソッドと関数の違いとは?構造体メソッドの仕組みを学ぼう
Go言語のメソッドと関数の違いとは?構造体メソッドの仕組みを学ぼう

先生と生徒の会話形式で理解しよう

生徒

「Go言語で“関数”と“メソッド”って出てきましたが、この2つって何が違うんですか?」

先生

「良い疑問ですね!Go言語では“関数”と“メソッド”は似ているようで役割が異なります。具体的にどう違うのか、例を見ながら説明しましょう。」

生徒

「ぜひお願いします!どちらもfuncって書きますよね?」

先生

「その通り。書き方は似ていますが、“メソッド”は構造体とセットで使われる点がポイントです!」

1. Go言語における関数とメソッドの基本

1. Go言語における関数とメソッドの基本
1. Go言語における関数とメソッドの基本

関数は、特定の動作や処理を実行するためのコードのかたまりです。Go言語ではfuncキーワードを使って定義します。

一方、メソッドは構造体と一緒に使うことで、その構造体に特有の動作を定義することができます。

2. 関数の書き方を確認しよう

2. 関数の書き方を確認しよう
2. 関数の書き方を確認しよう

まずは一般的な関数の書き方から確認してみましょう。


package main

import "fmt"

// 普通の関数
func SayHello(name string) {
    fmt.Println("こんにちは", name)
}

func main() {
    SayHello("太郎")
}

実行結果:


こんにちは 太郎

このように、関数は単独で使えます。SayHelloという関数を呼び出して、名前を渡してあいさつしています。

3. メソッドの書き方を学ぼう

3. メソッドの書き方を学ぼう
3. メソッドの書き方を学ぼう

メソッドは構造体と組み合わせて使うのが特徴です。次の例では、Personという構造体にあいさつのメソッドを定義しています。


package main

import "fmt"

// Person構造体を定義
type Person struct {
    Name string
}

// Person型のメソッド
func (p Person) Greet() {
    fmt.Println("こんにちは、私は", p.Name, "です")
}

func main() {
    p1 := Person{Name: "花子"}
    p1.Greet()
}

実行結果:


こんにちは、私は 花子 です

func (p Person)という書き方が“レシーバ”で、これによってこの関数がPerson型のメソッドになります。

4. 関数とメソッドの違いを表で比較

4. 関数とメソッドの違いを表で比較
4. 関数とメソッドの違いを表で比較
項目 関数 メソッド
定義の書き方 func 関数名(...) {...} func (レシーバ 型) メソッド名(...) {...}
使い方 単独で呼び出す 構造体の変数に対して呼び出す
構造体との関係 なし あり(結びつく)

5. なぜメソッドを使うのか?

5. なぜメソッドを使うのか?
5. なぜメソッドを使うのか?

メソッドを使うことで、「この動作はこのデータに関係する」とはっきりわかるようになります。

例えば、人という構造体が「挨拶する」「誕生日を迎える」といった動きを持つことで、オブジェクト指向的なプログラムが書けるようになります。

6. ポインタレシーバを使ったメソッド

6. ポインタレシーバを使ったメソッド
6. ポインタレシーバを使ったメソッド

メソッドには2つの種類があります。「値レシーバ」と「ポインタレシーバ」です。ポインタレシーバを使うと、構造体の中身を変更することができます。


type Counter struct {
    Count int
}

// ポインタレシーバ
func (c *Counter) Increment() {
    c.Count++
}

func main() {
    c := Counter{Count: 5}
    c.Increment()
    fmt.Println("カウント:", c.Count)
}

実行結果:


カウント: 6

このように、ポインタレシーバを使うと構造体の値そのものを変更できるので、状態を持つデータとの相性がとても良いです。

7. メソッドは関数の特別バージョン

7. メソッドは関数の特別バージョン
7. メソッドは関数の特別バージョン

まとめると、Go言語ではメソッドは“構造体にひもづいた関数”だと考えるとわかりやすいです。つまり、「構造体が動作を持つ」イメージです。

関数はただの処理、メソッドは“誰がその処理をするか”をはっきりさせたものです。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!