本文へスキップ
BecomeCoder

Goコース · 第1章 Goをはじめる · レッスン4

型変換 ― 暗黙の変換はしない

ブラウザで完結

導入

Go は「int と float64 を勝手に混ぜて計算する」ようなことを許しません。異なる型どうしの計算には、明示的な型変換が必要です。厳しく見えますが、意図しないバグを防ぐための設計です。

説明

package main

import "fmt"

func main() {
    total := 10      // int
    count := 3       // int

    // 平均を小数で出したい → float64 に変換してから割る
    average := float64(total) / float64(count)
    fmt.Printf("平均: %.2f\n", average)

    // 文字列と数値の連結もそのままではできない
    age := 30
    fmt.Println("年齢は " + fmt.Sprint(age) + " 歳")
}
  • float64(total)int の値を float64 に変換する。型名(値) の形が型変換です。
  • int どうしの割り算は小数を切り捨てるため、10 / 33 になってしまいます。先に float64 へ変換するのがコツです。
  • fmt.Sprint(age) … 値を文字列にして返す関数。数値を文字列に混ぜたいときに使います。

実行結果:

平均: 3.33
average を int どうしで割ると 3 になる
年齢は 30 歳

やってみよう

float64(total) / float64(count) の変換を外して total / count にすると、結果が 3.00 になってしまいます(小数点以下が切り捨てられるため)。「割り算の前に float64 へ」は Go でよくハマるポイントなので覚えておきましょう。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。