[Goのはじめ方] Part6: 基本データ型(int, float, string, bool)

Go

Goプログラミングの基礎となるデータ型を学ぼう!

プログラミングでは、様々な種類のデータ(数値、文字、真偽など)を扱います。Go言語では、これらのデータを効率的に扱うために「データ型」という仕組みが用意されています。データ型は、変数にどのような種類の値を格納できるかを定義します。

今回は、Go言語で最もよく使われる基本的なデータ型、整数型 (int)浮動小数点数型 (float)文字列型 (string)真偽値型 (bool) について学んでいきましょう!😊

🔢 整数型 (Integer Types)

整数型は、-1, 0, 100 のような整数値を格納するためのデータ型です。Go言語には、扱える値の範囲や符号の有無によっていくつかの整数型があります。

主な整数型

型名 説明 範囲 (一般的な環境)
int8 符号付き8ビット整数 -128 ~ 127
int16 符号付き16ビット整数 -32768 ~ 32767
int32 符号付き32ビット整数 -2147483648 ~ 2147483647
int64 符号付き64ビット整数 -9223372036854775808 ~ 9223372036854775807
uint8 符号なし8ビット整数 (byte の別名) 0 ~ 255
uint16 符号なし16ビット整数 0 ~ 65535
uint32 符号なし32ビット整数 0 ~ 4294967295
uint64 符号なし64ビット整数 0 ~ 18446744073709551615
int プラットフォーム依存 (32bit環境ではint32, 64bit環境ではint64) プラットフォーム依存
uint プラットフォーム依存 (32bit環境ではuint32, 64bit環境ではuint64) プラットフォーム依存
rune Unicodeコードポイントを表す (int32 の別名) -2147483648 ~ 2147483647

通常、整数を扱う際は int を使うことが多いです。Goは実行環境(OSが32bitか64bitか)に応じて最適なサイズ (int32 または int64) を自動で選択してくれます。

使い方

package main

import "fmt"

func main() {
    // varを使って明示的に型を指定
    var age int = 30
    var score int64 = -10000000000

    // := を使った型推論 (通常はint型になる)
    count := 10
    negativeCount := -5

    // 符号なし整数
    var positiveScore uint = 150

    fmt.Println("Age:", age)
    fmt.Println("Score:", score)
    fmt.Println("Count:", count)
    fmt.Println("Negative Count:", negativeCount)
    fmt.Println("Positive Score:", positiveScore)

    // 演算
    sum := age + count
    fmt.Println("Sum:", sum)
}
注意点: 異なる整数型同士の演算はそのままではできません。型変換(キャスト)が必要です。また、各型には格納できる値の範囲があり、それを超えるとオーバーフローが発生します。

🔢 浮動小数点数型 (Floating-Point Types)

浮動小数点数型は、3.14-0.5 のような小数を含む数値を格納するためのデータ型です。Go言語には主に2種類の浮動小数点数型があります。

主な浮動小数点数型

型名 説明 精度
float32 単精度浮動小数点数 約6桁の精度
float64 倍精度浮動小数点数 約15桁の精度

通常、精度が求められる計算では float64 を使うことが推奨されます。型を省略して小数を変数に代入した場合、Goは自動的に float64 を選択します。

使い方

package main

import "fmt"

func main() {
    // varを使って明示的に型を指定
    var pi float32 = 3.14159
    var price float64 = 99.99

    // := を使った型推論 (通常はfloat64型になる)
    ratio := 0.75
    temperature := -5.5

    fmt.Println("Pi (float32):", pi)
    fmt.Println("Price (float64):", price)
    fmt.Println("Ratio:", ratio)
    fmt.Println("Temperature:", temperature)

    // 演算
    totalPrice := price * (1.0 + ratio) // priceはfloat64なので、ratioもfloat64として扱われる
    fmt.Println("Total Price:", totalPrice)
}
注意点: 浮動小数点数はコンピュータの内部表現の都合上、誤差を含むことがあります。特に、等価比較 (==) を行う際には注意が必要です。また、float32float64 の間の演算も型変換が必要です。

🔡 文字列型 (String Type)

文字列型 (string) は、「Hello, World!」のような文字の並びを格納するためのデータ型です。Goの文字列はダブルクォート (") で囲んで表現します。

特徴

  • 不変 (Immutable): 一度作成した文字列の内容を変更することはできません。新しい文字列を代入することは可能です。
  • UTF-8エンコーディング: Goの文字列は内部的にUTF-8でエンコードされており、日本語などの多バイト文字もそのまま扱えます。
  • 連結可能: + 演算子を使って文字列同士を連結できます。

使い方

package main

import "fmt"

func main() {
    // varを使って明示的に型を指定
    var message string = "こんにちは、Go言語!"

    // := を使った型推論
    greeting := "Hello"
    target := "World"

    fmt.Println(message)

    // 文字列の連結
    helloWorld := greeting + ", " + target + "!" // + で連結
    fmt.Println(helloWorld)

    // 文字列の長さを取得 (バイト単位)
    fmt.Println("Length of message (bytes):", len(message))

    // 文字列の一部にアクセス (バイト単位でのアクセスになるので注意)
    fmt.Println("First byte of greeting:", greeting[0]) // H のASCIIコードが出力される

    // 文字列は変更不可
    // greeting[0] = 'h' // このような操作はコンパイルエラーになる
}
補足: len() 関数で取得できるのは文字列のバイト数です。日本語のようなマルチバイト文字を含む場合、文字数とは一致しない点に注意が必要です。文字数を正確に数えたい場合は、unicode/utf8 パッケージの RuneCountInString() 関数などを使います。

✅ 真偽値型 (Boolean Type)

真偽値型 (bool) は、真 (true) または偽 (false) のどちらかの値のみを持つデータ型です。条件分岐 (if文) やループ (for文) の制御などで非常に重要な役割を果たします。

使い方

package main

import "fmt"

func main() {
    // varを使って明示的に型を指定 (初期値は false)
    var isEnabled bool
    var isVisible bool = true

    // := を使った型推論
    hasPermission := true
    isFinished := false

    fmt.Println("isEnabled (default):", isEnabled) // false
    fmt.Println("isVisible:", isVisible)           // true
    fmt.Println("hasPermission:", hasPermission)   // true
    fmt.Println("isFinished:", isFinished)         // false

    // 論理演算子 (&&: AND, ||: OR, !: NOT)
    canProceed := isEnabled && hasPermission // false AND true => false
    canShow := isVisible || isFinished       // true OR false => true
    isNotFinished := !isFinished             // NOT false => true

    fmt.Println("Can Proceed:", canProceed)
    fmt.Println("Can Show:", canShow)
    fmt.Println("Is Not Finished:", isNotFinished)

    // 条件分岐での利用
    if hasPermission {
        fmt.Println("権限があります。")
    } else {
        fmt.Println("権限がありません。")
    }
}

bool 型は非常にシンプルですが、プログラムのロジックを組み立てる上で欠かせない要素です。

まとめ

今回はGo言語の基本的なデータ型である int, float, string, bool について学びました。

  • int: 整数を扱う。通常は int を使う。
  • float: 小数を扱う。通常は float64 を使う。
  • string: 文字列を扱う。不変でUTF-8エンコーディング。
  • bool: 真偽値 (true / false) を扱う。

これらの基本データ型は、Goプログラミングのあらゆる場面で登場します。それぞれの特徴を理解し、適切に使いこなせるようになりましょう!🚀

コメント

タイトルとURLをコピーしました