Go言語(Golang)はシンプルで効率的なプログラミング言語であり、特に並行処理(concurrency)や高いパフォーマンスが要求されるシステム開発に適しています。Go言語では、データ型はプログラムの構造を形成する重要な要素であり、正確に理解して活用することが非常に重要です。本記事では、Go言語の基本的なデータ型を完全かつ包括的に紹介します。
基本的なデータ型
Go言語には主に8種類の基本的なデータ型があります。これらは、変数に格納される値の種類を決定します。

-
整数型(整数値を表現)
Goには、いくつかの整数型があります。これらは符号付き(signed)と符号なし(unsigned)の整数に分かれます。int
: 通常の整数型で、システムに依存したサイズ(32ビットまたは64ビット)を持ちます。プラットフォームによって異なりますが、標準的な整数型として使用されます。int8
: 8ビットの符号付き整数(-128から127まで)。int16
: 16ビットの符号付き整数(-32,768から32,767まで)。int32
: 32ビットの符号付き整数(-2,147,483,648から2,147,483,647まで)。int64
: 64ビットの符号付き整数(-9,223,372,036,854,775,808から9,223,372,036,854,775,807まで)。uint
:int
と同じサイズですが、符号なし整数です。uint8
: 8ビットの符号なし整数(0から255まで)。uint16
: 16ビットの符号なし整数(0から65,535まで)。uint32
: 32ビットの符号なし整数(0から4,294,967,295まで)。uint64
: 64ビットの符号なし整数(0から18,446,744,073,709,551,615まで)。
-
浮動小数点型(実数を表現)
Goでは、浮動小数点数も2種類のデータ型で表現できます。float32
: 32ビットの浮動小数点数。float64
: 64ビットの浮動小数点数。精度が高いため、実数計算には一般的にこちらが使用されます。
-
複素数型
Goは複素数を扱うための組み込みデータ型も提供しています。complex64
: 64ビットの複素数(実部と虚部がそれぞれ32ビットの浮動小数点数)。complex128
: 128ビットの複素数(実部と虚部がそれぞれ64ビットの浮動小数点数)。
-
文字型(文字を表現)
Goで文字を扱う場合、rune
型(実際にはint32
型)が使用されます。rune
型はUnicodeコードポイントを表すために用いられ、1文字ごとに値が割り当てられます。rune
: Unicode文字を表現するための型で、1文字を格納できます。
文字列(
string
)もGoでは重要なデータ型です。文字列は不変(immutable)であり、UTF-8エンコードされた文字のシーケンスとして格納されます。 -
ブール型(論理値)
Goでは、bool
型はtrue
またはfalse
の2つの値を取ることができます。この型は条件式やフラグとしてよく使用されます。bool
: 論理値(真または偽)を表現するための型。
複合データ型
基本的なデータ型に加えて、Goには複雑なデータ構造を扱うための複合データ型も豊富に用意されています。これらは、データをより効率的に管理したり、より高度なデータ操作を可能にしたりします。
-
配列(Array)
配列は固定長のデータ型で、同じ型の要素を順番に格納します。配列の長さは宣言時に決まり、その後変更することはできません。govar arr [5]int arr[0] = 10 arr[1] = 20
配列はサイズが固定であるため、可変長のデータを扱う場合には、スライス(Slice)を使用します。
-
スライス(Slice)
スライスは動的な配列で、可変長です。配列の一部を参照することができ、サイズを動的に変更できます。govar slice []int slice = append(slice, 10) slice = append(slice, 20)
-
マップ(Map)
マップはキーと値のペアを格納するデータ型です。Goでは、キーはユニークであり、各キーに対応する値を格納します。govar m map[string]int m = make(map[string]int) m["apple"] = 5
-
構造体(Struct)
構造体は複数のフィールドをまとめて1つのデータ型として扱うためのものです。フィールドは異なる型を持つことができ、データのグルーピングに便利です。gotype Person struct { Name string Age int } var p Person p.Name = "Alice" p.Age = 30
-
インターフェース(Interface)
インターフェースはメソッドのセットを定義する型です。Goのインターフェースは、実装を強制することなくメソッドを持っていれば型として扱われます。これにより、多態性を実現します。gotype Speaker interface { Speak() string } type Person struct { Name string } func (p Person) Speak() string { return "Hello, " + p.Name }
型の変換
Goでは、異なる型間での明示的な変換が必要です。例えば、int
からfloat64
への変換は自動では行われないため、次のように記述します。
govar i int = 10
var f float64 = float64(i)
ポインタ(Pointer)
Goでは、ポインタ型を使用して変数のメモリアドレスを操作することができます。ポインタを使うことで、関数間でデータの参照を渡したり、大きなデータ構造の効率的な操作が可能になります。
govar x int = 58
var p *int = &x
終わりに
Go言語のデータ型は、そのシンプルさと柔軟性により、プログラムを効率的に記述するために重要な役割を果たします。基本的なデータ型から複合データ型、ポインタやインターフェースに至るまで、Goのデータ型を使いこなすことで、より高度なプログラムを書くことができます。Go言語を効果的に使用するためには、これらのデータ型を理解し、適切に選択して使用することが鍵となります。