コース一覧
    Go基礎:データ構造
    構造体

    Go基礎:データ構造

    Goのスライス、マップ、構造体、メソッドを使ったデータ表現を学ぶコースです。

    1
    スライスとマップ
    01. 配列15分
    02. スライス15分
    03. appendで育てる15分
    04. rangeで走査する15分
    05. マップ15分
    06. カンマokイディオム15分
    07. つくる: 検索と集計20分
    08. 第5章クイズ10分
    2
    構造体とメソッド
    01. 構造体15分
    02. 初期化とフィールド15分
    03. メソッド15分
    04. ポインタレシーバ20分
    05. New関数の慣習15分
    06. 構造体のスライス15分
    07. つくる: Itemで再設計20分
    08. 第6章クイズ10分

    構造体

    バラバラの変数をまとめる

    ここまで、商品を扱うのに並びを3つ渡してきました。

    Go

    func searchSummary(names []string, prices []int, categories []string, keyword string) string

    無理があります。同じ添字が同じ商品を指すという約束が、コードのどこにも書かれていません。長さがずれたら壊れますし、渡す順番を間違えても気づけません。

    1つの型にまとめます。

    Go

    type Item struct {
    	Name     string
    	Price    int
    	Category string
    }

    type 名前 struct { ... } で、新しい型を作ります。これが構造体です。

    関数の見た目が変わる

    Go

    func searchSummary(items []Item, keyword string) string

    並びが1つになりました。長さのずれが起こりえません。第6章のつくる回で、実際にこの形へ書き換えます。

    フィールド名は大文字で始める

    Go

    type Item struct {
    	Name  string   // 外から見える
    	price int      // このパッケージの中だけ
    }

    第4章の関数と同じ規則です。1文字目が大文字なら公開されます。

    入門のうちは全部大文字で始めておいて構いません。第8章で JSON に変換するとき、小文字始まりのフィールドは出力されないので、そこで効いてきます。

    型を作るということ

    Item は int や string と同じ、れっきとした型です。

    Go

    var item Item              // ゼロ値で作られる
    items := []Item{}          // Item のスライス
    func process(i Item) Item  // 引数にも戻り値にも使える

    ゼロ値もあります。各フィールドがそれぞれのゼロ値になります。

    Go

    var item Item
    // item.Name は ""、item.Price は 0、item.Category は ""

    第2章のゼロ値が、そのまま構造体にも効いています。宣言しただけで使える状態になっている、という一貫性です。

    クラスとは違う

    Go に class はありません。構造体はデータをまとめるだけで、継承もありません。

    振る舞いは、次の次のレッスンでやるメソッドとして、型に後から付けます。データと振る舞いが分かれているのが、Go の設計です。

    要件

    1. type Item struct で3つのフィールドを定義する
    2. フィールド名は Name・Price・Category とし、大文字で始める
    3. 受け取った値から Item を作る
    4. 商品名 価格円 [カテゴリ] の形を返す

    ヒント

    構造体の定義に `Price int` と `Category string` を足してください

    `Item{Name: name, Price: price, Category: category}` のように、フィールド名を書いて作ります

    フィールドは `item.Price` のようにドットで取り出します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 初期化とフィールド

      フィールド名を指定して構造体を作り、値を読み書きできるようになります。

    • メソッド

      型に振る舞いを持たせ、税込価格を返すメソッドを書けるようになります。

    • ポインタレシーバ

      値レシーバとの違いを実験で確かめ、変更が呼び出し元に効く理由を説明できます。

    • New関数の慣習

      検証つきの生成関数を書き、不正な商品を作れなくできるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 変数データに名前をつけて参照する仕組み
    • 関数処理に名前を付けて再利用できる単位
    • フィールドクラスが持つデータ
    • applicationJSON 本文を送るときの Content-Type
    • クラスデータと振る舞いを束ねる単位
    • 継承親クラスの機能を子クラスへ引き継ぐ仕組み
    • メソッドクラスに属する関数
    • 設計何をどう作るかを決める前工程
    main.go
    エディタを読み込んでいます

    メモ

    構造体

    ⌘S で保存