コース一覧
    Go基礎:制御構文
    funcで関数を作る

    Go基礎:制御構文

    Goの分岐、反復、関数、エラー処理を体系的に学ぶ基礎コースです。

    1
    制御構文(forしかない世界)
    01. Goのif15分
    02. forしかない世界15分
    03. forの七変化15分
    04. Goのswitch15分
    05. 定番: FizzBuzz15分
    06. ループで集計15分
    07. つくる: 商品集計20分
    08. 第3章クイズ10分
    2
    関数とエラー処理
    01. funcで関数を作る15分
    02. 複数戻り値(Goならでは)15分
    03. if err != nil(Goの心臓)15分
    04. エラーを作る15分
    05. deferで後始末15分
    06. つくる: 検証つき関数群20分
    07. 第4章クイズ10分

    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 を呼び、価格から手数料を引いた額を返す

    ヒント

    `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 で保存