1. 1000円未満が2件
  2. 上限を上げると増える
  3. 上限ちょうどは含まない
  4. 1件も該当しないとき
  5. 全部該当するとき
コース一覧
Go入門
appendで育てる

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分

appendで育てる

追加は append

Go

prices := []int{1200, 24800} prices = append(prices, 999) // [1200, 24800, 999]

注目してほしいのは、結果を代入し直していることです。

Go

append(prices, 999) // これだけでは増えない prices = append(prices, 999) // こう書く

append は元のスライスを変えるのではなく、追加した結果を返します。受け取らないと消えます。

書き忘れると増えないので、Go は「結果を使っていない」とエラーで教えてくれます。

なぜ返す形なのか

前のレッスンで、スライスは配列を指す情報だと書きました。入れ物には最初から決まった容量があり、空きがあるうちは同じ配列に書き足します。

プレーンテキスト

容量4のうち2つ使用 → 3つ目を足す → 同じ場所に書ける

空きが無くなると、より大きい配列を新しく作って引っ越します。このとき指す先が変わるので、新しい情報を返す必要があります。だから代入し直す形になっています。

引っ越しが起きても書いた側は気にしなくてよい、というのがこの仕組みの狙いです。

複数まとめて足す

Go

prices = append(prices, 999, 500, 300)

スライスごと足すこともできます。

Go

more := []int{500, 300} prices = append(prices, more...)

末尾の ... は「バラして渡す」という意味です。これが無いと「スライスを1個足す」ことになり、型が合わずエラーになります。

空から育てる

条件に合うものだけ集めるとき、この形をよく使います。

Go

var cheap []int for i := 0; i < len(prices); i++ { if prices[i] < 1000 { cheap = append(cheap, prices[i]) } }

var cheap []int のゼロ値は nil ですが、append は nil にも足せます。空から始めて育てるのが定石です。

第2章のゼロ値が効いている場面です。初期化を書かずに、いきなり使い始められます。

要件

  1. 価格が上限未満の商品を集める(上限ちょうどは含まない)
  2. 集めた商品名を , でつないで返す
  3. 1件も該当しないときは 該当なし を返す
  4. 集めるところで append を使う

入出力例

cheapItems(["きのこ図鑑","中古スマホ","古い辞書"], [1200,24800,800], 1000) → "古い辞書" cheapItems(["きのこ図鑑","中古スマホ","古い辞書"], [1200,24800,800], 2000) → "きのこ図鑑, 古い辞書" cheapItems(["きのこ図鑑","古い辞書"], [1000,800], 1000) → "古い辞書" cheapItems(["中古スマホ"], [24800], 1000) → "該当なし" cheapItems(["A","B"], [100,200], 1000) → "A, B"

ヒント

初期コードは全件を集めてしまっています。`if prices[i] < limit {` で絞ってください

`<` と `<=` の違いに注意してください。上限ちょうどは含みません

集め終わった後に `if len(found) == 0 {` で該当なしを判定します。つなぐ処理の前に置いてください

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

関連レッスン

  • rangeで走査する

    for rangeで添字と値を同時に受け取り、一覧を番号つきで表示できるようになります。

  • マップ

    キーと値の組で持つマップを使い、カテゴリごとの件数を集計できるようになります。

  • カンマokイディオム

    キーの有無を2つ目の戻り値で判定し、無いキーを安全に扱えるようになります。

  • つくる: 検索と集計

    第5章の知識でキーワード検索とカテゴリ集計を同時に行えるようになります。

main.go
学習モード
エディタを読み込んでいます

メモ

appendで育てる

⌘S で保存