1. 1200円の10パーセント
  2. 999円の10パーセント(切り捨て)
  3. 24800円の5パーセント
  4. 価格が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分

暗黙変換なし

int と float64 は足せない

Go

stock := 3 // int rate := 0.1 // float64 total := stock * rate // エラー

プレーンテキスト

invalid operation: stock * rate (mismatched types int and float64)

「型が合いません」と言われます。多くの言語なら勝手に合わせてくれるところで、Go は止まります。

なぜ止めるのか

勝手に変換すると、気づかないうちに値が変わることがあるからです。

プレーンテキスト

7 / 2 int どうし 3 小数が消える 7.0 / 2.0 float64 どうし 3.5

どちらの計算をしたかったのかは、書いた人にしか分かりません。Go は推測せず、書いた人に決めさせます。

混ぜてよいかを毎回考えることになるので、書くのは少し面倒です。その代わり、読むときに計算結果を推測しなくて済みます。

明示的に変換する

変換は、型の名前を関数のように使います。

Go

float64(stock) // int を float64 にする int(rate) // float64 を int にする

さっきの計算はこう書きます。

Go

total := float64(stock) * rate // 0.30000000000000004

変換で値が変わることがある

float64 から int への変換は、小数を切り捨てます。

Go

var f = 3.9 int(f) // 3。四捨五入ではない var g = -3.9 int(g) // -3。0 に近づく向きに切る

手数料の計算で気をつける場所です。

Go

price := 1200 fee := int(float64(price) * 0.1) // 120

float64 で計算してから int に戻す、という順番になります。この行は第4章の手数料計算でそのまま使います。

同じ int どうしでも別の型

細かい話ですが、int と int64 も別の型です。

Go

var a int = 1 var b int64 = 2 a + b // エラー

「整数なんだから足せるだろう」と思うところですが、Go は型の名前が違えば別物として扱います。徹底しているぶん、迷いがありません。

定数はそのままでは変換できない

上の例で一度変数に入れているのには理由があります。

Go

int(3.9) // コンパイルエラー

3.9 のように直接書いた数値は、型の付いていない定数という扱いです。まだ float64 と決まっていないので、int への変換もできません。

プレーンテキスト

cannot convert 3.9 (untyped float constant) to type int

変数に入れると float64 という型が決まるので、そこから int へ変換できます。実際のコードでは計算結果を変数で受けていることがほとんどなので、この制約で困る場面はあまりありません。

要件

  1. 価格を float64 に変換してから手数料率を掛ける
  2. 計算結果を int に変換して返す
  3. 小数は切り捨てる(int への変換がそのまま切り捨てになります)

入出力例

feeOf(1200, 0.1) → 120 feeOf(999, 0.1) → 99 feeOf(24800, 0.05) → 1240 feeOf(0, 0.1) → 0

ヒント

`float64(price)` と書くと、int の price を float64 として扱えます

計算の順番は「float64 にする → 掛ける → int に戻す」です。`int(float64(price) * rate)` の1行で書けます

`int()` は四捨五入ではなく切り捨てです。99.9 は 99 になります

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

関連レッスン

  • 定数とiota

    constで変わらない値を定義し、iotaで連番の状態を作れるようになります。

  • つくる: 商品データ表示

    第2章の知識で商品3件を型付きで持ち、整形して表示できるようになります。

  • 第2章クイズ

    var と :=、ゼロ値、基本型、暗黙変換なし、定数についての理解を確認します。

  • Goのif

    括弧の要らないifと、条件の前に文を置けるifを書けるようになります。

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

メモ

暗黙変換なし

⌘S で保存