Go練習問題3-06:構造体の定義を理解しよう

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

Go言語の初心者向け問題3-06:構造体の定義を理解しよう

この問題を解くために必要な知識:
レベル1~2の知識関数の定義と呼び出し関数の戻り値と複数の戻り値関数の可変長引数無名関数(匿名関数)クロージャ構造体の定義とコンストラクタ関数構造体の埋め込みメソッドの定義とレシーバインターフェース型アサーション型スイッチ

<<前の問題 問題集Top 次の問題>>

Go言語の文法「構造体の定義」とは





ここでは構造体の定義の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Go言語でプログラムを作成する際、複数のデータをまとめて扱いたい場合に「構造体(Struct)」を使用します。構造体は、異なるデータ型を一つのユニットにまとめるのに便利です。この記事では、Go言語の構造体の定義方法とその使用例を解説します。

構造体の定義と基本的な使い方

構造体はtypeキーワードを使って定義します。例えば、人物の情報を扱うための構造体を定義するには、次のように書きます。

type Person struct {
    Name string
    Age  int
}

このPersonという構造体は、Nameという文字列型のフィールドと、Ageという整数型のフィールドを持っています。

構造体のインスタンスを作成する

構造体を使うためには、そのインスタンスを作成します。次のコードでは、Person構造体のインスタンスを作成し、そのフィールドに値を代入しています。

func main() {
    john := Person{
        Name: "John",
        Age:  30,
    }
    fmt.Println(john)
}

コンストラクタ関数の利用

構造体に特定の初期値を設定したい場合は、コンストラクタ関数を使います。

コンストラクタ関数については次の記事で詳細に説明します。

構造体の埋め込み

Go言語には、構造体の「埋め込み」という機能があります。これは、ある構造体のフィールドとして別の構造体を直接埋め込むことができるものです。

type Employee struct {
    Person
    ID int
}

この例では、Employee構造体にPerson構造体が埋め込まれています。これにより、EmployeeインスタンスからPersonのフィールドに直接アクセスできます。

まとめ

Go言語の構造体は、関連するデータを一つにまとめるために非常に便利な機能です。構造体の定義、インスタンス作成、コンストラクタ関数、そして埋め込み機能を理解することで、より効率的で整理されたコードを書くことができるようになります。

Go練習問題3-:構造体を使って人物情報を管理しよう

構造体を使って、人物情報(名前と年齢)を管理するプログラムを作成しましょう。

このプログラムでは、構造体を使って一人の人物の情報を保持し、その情報を表示する機能を実装します。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • Personという名前の構造体を定義し、Name(文字列型)とAge(整数型)の2つのフィールドを持つこと。
  • Person構造体のインスタンスを作成し、名前に「佐藤」、年齢に「25」を設定すること。
  • 構造体のフィールドから情報を取得し、名前と年齢を画面に表示すること。
  • Ageフィールドの値を「26」に更新し、更新後の年齢を再度表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

名前: 佐藤
年齢: 25
更新された年齢: 26

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.mainパッケージのインポート宣言
2.fmtパッケージのインポート宣言
3.Person構造体の定義
 3-1. Nameフィールドの定義(文字列型)
 3-2. Ageフィールドの定義(整数型)
4.main関数の定義
 4-1. Person構造体のインスタンス作成
 4-2. fmt.PrintlnによるNameフィールドの出力
 4-3. fmt.PrintlnによるAgeフィールドの出力
 4-4. Ageフィールドの更新
 4-5. 更新後のAgeフィールドの出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

package main

import "fmt"

/*【穴埋め問題1】
ここにPersonという名前の構造体を定義し、その中に2つのフィールド、Name(string型)とAge(int型)を含めるコードを書いてください。
*/

func main() {
    /*【穴埋め問題2】
    ここに構造体のインスタンスを作成し、Nameに"佐藤"、Ageに25を設定するコードを書いてください。
    */

    /*【穴埋め問題3】
    ここに構造体のフィールドNameとAgeの値を表示するためのコードを書いてください。
    */

    // フィールドを更新
    p.Age = 26  // 年齢フィールドを更新
    fmt.Println("更新された年齢:", p.Age)
}

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

package main

import "fmt"

// Personという名前の構造体を定義
type Person struct {
    Name string  // 名前を保持するフィールド
    Age  int     // 年齢を保持するフィールド
}

func main() {
    // 構造体のインスタンスを作成
    p := Person{
        Name: "佐藤",
        Age:  25,
    }

    // 構造体のフィールドにアクセスして出力
    fmt.Println("名前:", p.Name)
    fmt.Println("年齢:", p.Age)

    // 構造体のフィールドを更新
    p.Age = 26
    fmt.Println("更新された年齢:", p.Age)
}

正解コードの解説

このGoコードでは、構造体を使って人物の情報を管理する方法について学びます。以下に、コードの各部分を分かりやすく解説します。

mainパッケージとfmtパッケージのインポート

package main

import "fmt"
  • package main: Goプログラムのエントリーポイントを示すパッケージです。mainパッケージを使うことで、このコードが実行可能なプログラムになることを示します。
  • import "fmt": 標準入出力を行うためのパッケージをインポートします。このコードでは、文字列を画面に出力するために使用されます。

構造体Personの定義

type Person struct {
    Name string  // 名前を保持するフィールド
    Age  int     // 年齢を保持するフィールド
}
  • 構造体の定義: typeキーワードを使って、新しいデータ型(構造体)を定義します。この構造体は複数のフィールドを持つことができ、ここではNameAgeの2つのフィールドが定義されています。
  • Name string: Nameは文字列型のフィールドで、人物の名前を保持します。
  • Age int: Ageは整数型のフィールドで、人物の年齢を保持します。

main関数の開始と構造体インスタンスの作成

func main() {
    p := Person{
        Name: "佐藤",  // 名前フィールドに初期値を設定
        Age:  25,     // 年齢フィールドに初期値を設定
    }
  • func main(): プログラムのエントリーポイントで、ここから処理が始まります。
  • 構造体インスタンスの作成: Person構造体のインスタンスpを作成し、Nameに”佐藤”、Ageに25を設定しています。

構造体フィールドの出力

    fmt.Println("名前:", p.Name)
    fmt.Println("年齢:", p.Age)
  • fmt.Println: 標準出力に文字列を表示します。ここでは、Person構造体のNameAgeフィールドの値をそれぞれ表示します。

フィールドの更新と再出力

    p.Age = 26  // 年齢フィールドを更新
    fmt.Println("更新された年齢:", p.Age)
  • フィールドの更新: p.Ageに新しい値(26)を設定し、Ageフィールドの値を更新しています。
  • 更新後の出力: 更新されたAgeフィールドの値を再度表示します。

まとめ

このコードを通じて、Go言語での構造体の定義方法や、そのフィールドの初期化、値の更新方法について学びました。

構造体は複数のデータを一つにまとめることができ、非常に便利なツールです。このコードでは、構造体を使って名前と年齢を管理し、値を表示・更新する基本的な操作を紹介しました。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Go練習問題集へ戻る
    トップページへ戻る