1. 1200円のとき
  2. 切り捨てが起きるとき
  3. 24800円のとき
  4. 0円のとき
コース一覧
Go入門
funcで関数を作る

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分

funcで関数を作る

型を全部書く

Go

func feeOf(price int, rate float64) int { return int(float64(price) * rate) }

読む順番は「func → 名前 → 引数 → 戻り値の型 → 中身」です。

引数も戻り値も、型を省略できません。何を受け取って何を返すのか、宣言の1行を見れば分かります。中身を読まずに使い方が分かる、というのが Go の関数の基本姿勢です。

同じ型が続くときはまとめられる

Go

func addPrice(a int, b int) int func addPrice(a, b int) int // 同じ意味

最後の1つに型を書けば、手前の引数も同じ型になります。3つ4つと並ぶときに効きます。

戻り値が無い関数

Go

func logStart(name string) { fmt.Println(name, "を開始します") }

戻り値の型を書かなければ、何も返しません。

大文字で始まるかどうかで公開が決まる

Go には public や private という言葉がありません。代わりに名前の1文字目で決まります。

プレーンテキスト

FeeOf 大文字始まり 他のパッケージから使える feeOf 小文字始まり 同じパッケージの中だけ

これも Go らしい割り切りです。修飾子を書く場所を作らず、名前だけで表します。慣れると、名前を見ただけで公開範囲が分かるので読むのが速くなります。

関数に切り出す判断

第2章のつくる回で、状態を日本語にする部分を別の関数にしました。あれと同じ判断です。

プレーンテキスト

同じ処理が2回以上出てきた 中身に名前を付けたほうが読みやすい そこだけ単体で確かめたい

このどれかに当てはまったら切り出します。逆に、1回しか使わず名前も付けにくいものを無理に関数にすると、行ったり来たりが増えて読みにくくなります。

関数の中に関数を書ける

Go

func main() { double := func(n int) int { return n * 2 } fmt.Println(double(3)) // 6 }

名前の無い関数を変数に入れる形です。第7章のゴルーチンで、この書き方が頻繁に出てきます。いまは「そういう書き方もある」と知っておけば十分です。

要件

  1. feeOf が価格を受け取って手数料を返す
  2. 手数料は価格の10パーセントで、小数は切り捨てる
  3. payoutOf は feeOf を呼び、価格から手数料を引いた額を返す

入出力例

payoutOf(1200) → 1080 payoutOf(999) → 900 payoutOf(24800) → 22320 payoutOf(0) → 0

ヒント

`feeOf` の中身は第2章で書いた `int(float64(price) * FeeRate)` と同じです

`payoutOf` からは `feeOf(price)` と書いて呼び出せます

999円の手数料は 99.9 の切り捨てで 99 円、受取額は 900 円になります

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

関連レッスン

  • 複数戻り値(Goならでは)

    2つの値を同時に返し、結果と成否を1回の呼び出しで受け取れるようになります。

  • if err != nil(Goの心臓)

    errorを受けて分岐する型を身につけ、失敗を無視しないコードを書けるようになります。

  • エラーを作る

    errors.Newとfmt.Errorfで自分のエラーを返し、理由の分かる失敗を作れるようになります。

  • deferで後始末

    関数の終わりに実行する処理を予約し、開始と終了のログを対で出せるようになります。

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

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

  • 引数位置引数=順番で渡す。
  • 戻り値呼び出し元への返答を表す点線矢印
  • 関数処理に名前を付けて再利用できる単位
  • 判断YES/NO 分岐を表す菱形
  • 変数データに名前をつけて参照する仕組み
main.go
学習モード
エディタを読み込んでいます

メモ

funcで関数を作る

⌘S で保存