1. 本の商品
  2. 家電の商品
  3. 価格が0の商品
コース一覧
Go入門
構造体

Go入門

変数とゼロ値、Go唯一のループであるfor、複数戻り値とエラー処理、スライスとマップ、構造体とメソッド、ゴルーチンによる並行処理、net/httpによるAPI開発まで、Goの基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIをGoで作りながら学びます。

1
Hello, Go
01. Goとは15分
02. 実行してみる15分
03. packageとmain15分
04. fmtで出力する15分
05. go buildと1バイナリ15分
06. つくる: 起動バナー20分
07. 第1章クイズ10分
2
変数と型
01. varで宣言する15分
02. := の短縮宣言15分
03. ゼロ値(Goならでは)15分
04. 基本の型15分
05. 暗黙変換なし15分
06. 定数とiota15分
07. つくる: 商品データ表示20分
08. 第2章クイズ10分
3
制御構文(forしかない世界)
01. Goのif15分
02. forしかない世界15分
03. forの七変化15分
04. Goのswitch15分
05. 定番: FizzBuzz15分
06. ループで集計15分
07. つくる: 商品集計20分
08. 第3章クイズ10分
4
関数とエラー処理
01. funcで関数を作る15分
02. 複数戻り値(Goならでは)15分
03. if err != nil(Goの心臓)15分
04. エラーを作る15分
05. deferで後始末15分
06. つくる: 検証つき関数群20分
07. 第4章クイズ10分
5
スライスとマップ
01. 配列15分
02. スライス15分
03. appendで育てる15分
04. rangeで走査する15分
05. マップ15分
06. カンマokイディオム15分
07. つくる: 検索と集計20分
08. 第5章クイズ10分
6
構造体とメソッド
01. 構造体15分
02. 初期化とフィールド15分
03. メソッド15分
04. ポインタレシーバ20分
05. New関数の慣習15分
06. 構造体のスライス15分
07. つくる: Itemで再設計20分
08. 第6章クイズ10分
7
ゴルーチンと並行処理のさわり
01. ゴルーチン15分
02. チャネル20分
03. 待ち合わせ20分
04. 並行の落とし穴20分
05. つくる: 並行集計20分
06. 第7章クイズ10分
8
Web API(net/http)
01. サーバーを立てる20分
02. ハンドラ関数20分
03. JSONを返す20分
04. ルーティング20分
05. 一覧API20分
06. 詳細APIと40420分
07. 出品API20分
08. つくる: API主要部完成25分
09. 第8章クイズ10分
9
総合制作
01. 仕様互換を仕上げる25分
02. Node版と差し替える25分
03. 1バイナリでデプロイ25分
04. 自由拡張25分
05. 完成と次のステップ20分

構造体

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

ここまで、商品を扱うのに並びを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. 商品名 価格円 [カテゴリ] の形を返す

入出力例

itemInfo("きのこ図鑑", 1200, "本") → "きのこ図鑑 1200円 [本]" itemInfo("中古スマホ", 24800, "家電") → "中古スマホ 24800円 [家電]" itemInfo("おまけ", 0, "その他") → "おまけ 0円 [その他]"

ヒント

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

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

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

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

関連レッスン

  • 初期化とフィールド

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

  • メソッド

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

  • ポインタレシーバ

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

  • New関数の慣習

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

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

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

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

メモ

構造体

⌘S で保存