0
0

はじめに

こんにちは、皆さん!今回は、Go言語の重要なデータ構造であるstructについて学んでいきましょう。structは、複数のフィールドを持つデータ型を定義するために使用されます。オブジェクト指向プログラミングのクラスに似ていますが、Go言語ではシンプルで効率的な方法でデータを扱うことができます。

structの基本

まずは、structの基本的な定義方法を見てみましょう。

package main

import "fmt"

// Personという名前のstructを定義
type Person struct {
    Name string
    Age  int
}

func main() {
    // Person型の変数を作成
    p := Person{Name: "Alice", Age: 30}
    fmt.Println(p)
}
結果
{Alice 30}

この例では、Personという名前のstructを定義し、NameAgeという2つのフィールドを持っています。main関数内でPerson型の変数pを作成し、フィールドに値を設定しています。

フィールドへのアクセス

structのフィールドにアクセスする方法を見てみましょう。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    fmt.Println("Name:", p.Name)
    fmt.Println("Age:", p.Age)
}
結果
Name: Alice
Age: 30

この例では、p.Namep.Ageを使ってstructのフィールドにアクセスしています。

メソッドの定義

structにメソッドを定義することもできます。以下の例を見てみましょう。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

// Person型に対するメソッドを定義
func (p Person) Greet() {
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    p.Greet()
}
結果
Hello, my name is Alice and I am 30 years old.

この例では、Person型に対してGreetというメソッドを定義しています。Greetメソッドは、Personのフィールドを使って挨拶メッセージを表示します。

ポインタレシーバ

メソッドを定義する際に、ポインタレシーバを使うこともできます。これにより、メソッド内でstructのフィールドを変更することができます。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

// ポインタレシーバを使ってメソッドを定義
func (p *Person) HaveBirthday() {
    p.Age++
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    p.HaveBirthday()
    fmt.Println("After birthday:", p.Age)
}
結果
After birthday: 31

この例では、HaveBirthdayメソッドがポインタレシーバを使って定義されています。メソッド内でAgeフィールドをインクリメントすることで、Personの年齢を1歳増やしています。

まとめ

Go言語のstructは、複数のフィールドを持つデータ型を定義するための強力なツールです。基本的な定義方法からフィールドへのアクセス、メソッドの定義、ポインタレシーバの使用方法までを学びました。これらの知識を活用して、より複雑なデータ構造を効率的に扱うことができるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0