本文へスキップ
BecomeCoder

Goコース · 第5章 構造体・メソッド・インターフェース · レッスン17

構造体 ― struct でデータをまとめる

ブラウザで完結

導入

「名前・年齢・住所」のように、関係する複数の値を1つのまとまりとして扱いたいことがあります。そのための型を自分で定義するのが 構造体(struct) です。

説明

package main

import "fmt"

// User という新しい型を定義する
type User struct {
    Name string
    Age  int
}

func main() {
    u := User{Name: "田中", Age: 30}

    fmt.Println(u.Name) // 田中
    fmt.Println(u.Age)  // 30

    u.Age = 31          // フィールドを書き換える
    fmt.Println(u)      // {田中 31}
}
  • type User struct { ... }User という新しい型を定義。NameAgeフィールド と呼びます。
  • User{Name: "田中", Age: 30} … フィールド名を指定して値を作ります。
  • u.Name.(ドット)でフィールドにアクセスします。

前章でマップの並びで表したデータも、構造体なら「どんなフィールドがあるか」が型として決まるので、打ち間違い("nmae" など)をコンパイラが防いでくれます。

やってみよう

UserCity string フィールドを足すと、User{Name: "田中", Age: 30, City: "東京"} のように住所も持てます。マップと違い、どんな項目を持つかが型で決まっているのが構造体の安心なところです。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。