Go言語 プリミティブ型

Goにはint, float32, string, boolなど基本的なデータ型があります。

Go言語 ブーリアン

Goのbool型はブール値を表すためのプリミティブ型であり、trueかfalseのどちらかになります。ブール値は、if文やforループなどの条件や制御構造でよく使われ、特定の条件を満たすかどうかに基づいて判断を下します。

var x bool = true

Go言語 文字列

Goのstring型は、文字列を表現するために使用されるデータ型です。文字列は二重引用符(")で囲まれ、文字、数字、記号、特殊文字を含む有効なUTF-8文字を含むことができます。

var x string = "Hello, World!"

Go言語 整数

int

int型は、整数を格納するために使用されます。符号付き整数型であり、そのサイズは、プログラムが実行されるプラットフォームに基づいて自動的に決定されます。32ビットプラットフォームではintは32ビットであり、64ビットプラットフォームではintは64ビットです。

intデータ型は、-263から263-1までの値を格納することができます。これはGoのデフォルトの整数型であり、整数値のサイズが指定されていないときに値を格納するために使用されます。異なる整数型の中から選択する場合は、整数値の大きさが気にならない場合や、整数値の大きさが指定されていない場合にintを使用する必要があります。

var x int = 2147483647

int8, int16, int32, int64

これらはそれぞれ8, 16, 32, 64ビットの符号付き整数型で、異なる範囲の整数値を格納するために使用され、型の大きさによって格納できる値の範囲が決定されます。

例えば、int8は-128から127までの値を格納でき、int64は-9223372036854775808から9223372036854775807までの値を格納することができます。

var x int8 = -128
var x int16 = 32767
var x int32 = 2147483647
var x int64 = 9223372036854775807

uint8, uint16, uint32, uint64

それぞれ8, 16, 32, 64ビットの符号なし整数型で、非負の整数値をさまざまな範囲で格納するために使用され、型の大きさによって格納できる値の範囲が決まります。

例えば、uint8は0から255までの値を格納でき、uint64は0から18446744073709551615までの値を格納することができます。

var x uint8 = 255
var x uint16 = 65535
var x uint32 = 4294967295
var x uint64 = 18446744073709551615

uintptr

uintptrデータ型は,ポインタ値を格納するための符号なし整数型です。ポインタとは、メモリ上のある値の位置を指し示すメモリアドレスのことです。uintptrのサイズはプラットフォームに依存し、32ビットまたは64ビットとなります。

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var i int
    var x uintptr = uintptr(unsafe.Pointer(&i))
    fmt.Println(x)
}

byte

byteデータ型はuint8の別名であり、1バイトのデータを表現するために使用されます。バイナリファイルやネットワークストリームのバイナリデータなど、生データを表現するためによく使われます。

var x byte = 'A'

rune

runeデータ型はint32の別名で、Unicodeコードポイントを表現するために使用されます。文字列の個々の文字を表現するために使用されます。

var x rune = '\u0041' // 65

Go言語 浮動小数点数

float32とfloat64型は浮動小数点数を表現するために使用されます。float32とfloat64の違いは、表現できる数値の大きさで、float32は32ビットの浮動小数点数、float64は64ビットの浮動小数点数です。

var x float32 = 3.14
var y float64 = 3.14159265358979323846

浮動小数点数を扱う場合、精度が限られていることと、メモリ上での表現方法によって必ずしも正確ではないことを念頭に置いておくことが重要です。ほとんどの場合、Goの浮動小数点数にはfloat64が推奨されます。

Go言語 複素数

Goのcomplex64とcomplex128型は、実数部と虚数部の両方を持つ数である複素数を表現するために使用されます。complex64とcomplex128の違いは、表現できる実数部と虚数部の大きさで、complex64は32ビットの実数部と虚数部を持ち、complex128は64ビットの実数部と虚数部を持ちます。

Goでは、複素数はreal + imaginaryiという構文で表され、realは実数成分、imaginaryは虚数成分になります。式中のiは虚数単位を表し、-1の平方根と定義されています。

var x complex64 = 3 + 4i
var y complex128 = 3 + 4i

Go言語 文字

GoにはJavaのように文字を表すchar型はありません。その代わり、文字はrune型で表現されます。runeは、文字、数字、記号など、1つのUnicode文字を格納するために使用されます。

var x rune = 'A' // 65
var y rune = '🙂' // 128072

Note: byteは1バイトのデータを表現するのに使われます。0から255までの256種類の値を表現することができ、これはASCII文字セットに対応しています。一方、runeは最大4294967296種類の文字を表現することができます。ルーン型は、英語以外のアルファベットの文字など、ASCII文字セットに含まれない文字を扱う必要がある場合に使用されます。

Go言語 オリジナルのデータ型

Goのtypeキーワードは、エイリアスと呼ばれ、新しい型を定義するために使用することができます。これにより、既存の型と同じ基本型を持ちながら、異なる名前を持つカスタム型を作成することができます。

package main

import "fmt"

type Feet float64

func main() {
    var x Feet = 10
    fmt.Println(x) // 10
}

この例では、float64のエイリアスとして新しい型Feetが定義されています。そして、Feet型の変数xが宣言され、値10で初期化されています。

カスタムタイプを使用すると、特に距離、重量、時間など特定の単位や意味を持つ値を扱う場合に、コードをより読みやすく、文書化しやすくすることができます。例えば、float64の型を持つ変数xがあったとして、その値が何を表しているのか、どのような単位なのかがすぐにはわからないかもしれません。

一方、float64のエイリアスとして定義されたFeet型の変数xがあれば、その値がフィート単位の距離を表していることはすぐにわかります。

Go言語 型変換

型変換とは、ある型から別の型に値を変換する処理を指します。これは、算術演算を行う必要がある場合や、特定の型を必要とする関数に値を渡す場合など、異なる型の値を扱うときに必要になることがあります。

Goにはfloat64(x), int64(x), string(x)などの型変換のための組み込み関数が用意されています。

var x int = 10
var y float64 = float64(x) // 10

逆にfloat64型からint型への変換も可能ですが、小数点が切り捨てられた値になります。

var f float64 = 1.6
var i int = int(f) // 1

また、型変換できない場合はコンパイルエラーになります。

s := "1"
i := int(s) // コンパイルエラー

この記事を書いた人

著者の画像

Jeffry Alvarado

Ex-Facebook Engineer 大学ではコンピュータサイエンスを専攻し、在学中に複数のインターンシップを経験。コンピュータサイエンスが学習できるプラットフォームRecursionを創業し、CTOとしてカリキュラム作成、ソフトウェア開発を担当。


ツイート