Golang PR

Go言語(Golang)の構造体(Struct)使い方完全ガイド【初心者向け】

記事内に商品プロモーションを含む場合があります

Go言語を学び始めると、
データのグループ化や
カスタムデータ型を扱う場面が出てきます。

そこで登場するのが「構造体(Struct)」です。
構造体は、異なるデータ型を
まとめて一つのまとまりとして扱うことができ、
オブジェクト指向プログラミングにおける
クラスのような役割を果たします。

本記事では、
Go言語の構造体について、
基礎から応用まで
初心者向けに丁寧に解説していきます!

構造体とは?

構造体は、
Go言語でカスタムデータ型を
作るためのデータ構造です。

異なるデータ型をまとめて一つにし、
まとまったデータとして扱うことができるため、
複数の情報を扱う際に非常に便利です。

たとえば、
「名前」「年齢」「住所」をまとめて
「Person」という構造体として扱うことで、
管理がしやすくなります。

構造体の定義方法

Go言語では、
structキーワードを使って構造体を定義します。

以下の例では、
Personという名前の構造体を定義し、
Name(名前)、Age(年齢)、
Address(住所)という3つのフィールドを持っています。

type Person struct {
    Name    string
    Age     int
    Address string
}


構造体は、
このように複数の異なるデータ型を
まとめて一つのカスタム型として定義します。

構造体の使い方

構造体を定義したら、
その構造体を使ってインスタンスを作成し、
データを管理することができます。

ここでは、
構造体の基本的な使い方を見ていきましょう。

構造体の初期化方法

構造体の初期化にはいくつか方法があります。

最も簡単な方法は、
構造体名を使ってインスタンスを作成し、
初期値を設定する方法です。

p := Person{"Alice", 30, "Tokyo"}
fmt.Println(p.Name)  // 出力: Alice


また、フィールド名を
指定して初期化することも可能です。

この方法では、
特定のフィールドのみを初期化し、
他のフィールドにはゼロ値(stringなら空文字、intなら0)が
自動的に設定されます。

p := Person{Name: "Bob", Age: 25}
fmt.Println(p.Address)  // 出力: (空文字)


このように、
必要なフィールドだけ初期化できるため、
柔軟に構造体を利用できます。

構造体内にメソッドを定義

Go言語では、
構造体に関連する関数を
メソッドとして定義できます。

メソッドを使うことで、
構造体に関連した動作を直接定義でき、
コードの可読性や再利用性が向上します。

以下は、Person構造体に
挨拶をするメソッドを追加した例です。

package main

import "fmt"

type Person struct {
	Name    string
	Age     int
	Address string
}

func (p Person) Greet() {
	fmt.Printf("Hello, my name is %s!\n", p.Name)
}

func main() {

	p := Person{Name: "Alice", Age: 30}
	p.Greet() // 出力: Hello, my name is Alice!
}


Go Playgroundでコードを確認

ここでは、
Person型にGreetというメソッドを追加しています。

このメソッドは、
Person構造体のNameフィールドを
使って挨拶メッセージを表示します。

構造体での配列とループ

構造体は複数のインスタンスを一括管理するために、
スライスや配列と組み合わせることができます。

たとえば、
複数のPerson構造体をスライスに格納し、
それをループで処理することで、
全てのインスタンスに対して処理を一度に行うことが可能です。

構造体のスライスを使ったループ処理

次の例では、
2人のPersonをスライスに格納し、
forループを使って全員の挨拶を表示します。

package main

import "fmt"

type Person struct {
	Name    string
	Age     int
	Address string
}

func (p Person) Greet() {
	fmt.Printf("Hello, my name is %s!\n", p.Name)
}

func main() {

	people := []Person{
		{"Alice", 30, "Tokyo"},
		{"Bob", 25, "Osaka"},
	}

	for _, person := range people {
		person.Greet()
	}
}


Go Playgroundでコードを確認

このコードでは、
peopleというスライスに
2つのPersonインスタンスを格納し、
forループを使って
それぞれのGreetメソッドを呼び出しています。

結果として、
2人それぞれの挨拶が表示されます。

まとめ

本記事では、
Go言語の構造体(Struct)の基礎から、
実際に使う際の応用例までを解説しました。

構造体を使うことで、
複数の関連するデータを一つにまとめ、
効率的に管理できます。

また、メソッドを使えば、
構造体に関連する動作を
一つのまとまりとして扱うことができ、
コードの可読性や保守性が向上します。

次のステップとして、
構造体の埋め込みや、
ポインタを使った高度な使い方にも挑戦してみましょう!