2.1 あらかじめ宣言された型
事前宣言された型(predeclared type)とは、Go言語にあらかじめ組み込まれている型。他の言語でもよく使われる論理値・整数・浮動少数点数・文字列など。
2.1.1 ゼロ値
宣言されたが、値が割り当てられていない変数には、デフォルトのゼロ値が割り当てられる。
code:go
var x int
var y float32
var z string
fmt.Println("x:", x) // x: 0
fmt.Println("y:", y) // y: 0
fmt.Printf("z:|%s|\n", z) // z:|| (空文字列)
2.1.2 リテラル
リテラル(literal)とは、数値・文字・文字列などを特定のデータ型の値をソースコード内でそのまま直接書いたもの。
2.1.2.1 整数リテラル
通常は10進数として表すが、頭に特定の文字を置くことで他の進数を表すこともできる。0bは2進数、0oは8進数、0xは16進数。
code:go
fmt.Println(0b11010) // 26
fmt.Println(0o32) // 26
fmt.Println(0x1a) // 26
また長い数字のリテラルを読みやすくするために、任意の箇所にアンダースコアを書ける。
code:go
fmt.Println(1_234_567) // 1234567
2.1.2.2 浮動小数点数リテラル
一般的な少数の表記のほか、指数を使った表記も可能。
また、先頭に0xをつけて16進数を表現したり、pをつけることで冪乗を表現することも可能。
code:go
fmt.Println(6.03e3) // 6.03*(10*10*10) = 6030
fmt.Println(0x2p5) // 2^5 (ここで^は冪乗。たとえば、2^5 は 2*2*2*2*2)
2.1.2.3 runeリテラル
先頭と最後に「'」を置く。
「"」で囲まれた文字の並びと「'」で囲まれた文字の並びは、扱いが異なる。
code:go
fmt.Println('a') // 1文字のUnicode文字
fmt.Println('\n') // 改行
fmt.Println('\t') // タブ
fmt.Println('\'') // 一重引用符(シングルクオート)
fmt.Println('\\') // バックスラッシュ
2.1.2.4 文字列リテラル
文字列リテラルの表現は、2種類ある。
解釈対象の文字列リテラル
エスケープされていない「\」・改行、あるいは「"」を含むことはできない。
「\」・改行を表示したいときは、エスケープを使う必要がある。
code:go
fmt.Println("\n") // 改行
fmt.Println("\\") // バックスラッシュ
ロー文字列リテラル
「`」以外の任意の文字を含めることができる。
エスケープ文字はなく、「`」以外のすべての文字がそのまま書かれる。
code:go
x := `バッククオートを使って"ロー文字列リテラル"を書くことで
改行や二重引用符(ダブルクオート)を文字列中に含めることができる`
fmt.Println(x)
2.1.2.5 リテラルは型付けされていない
リテラルは型がないとみなされる。
2.1.3 bool(論理型)
boolは真偽値を値として持つ変数の型。
boolの変数は、trueかfalseの値のみをもつ。
boolのゼロ値はfalse。
2.1.4 数値を表す型(数値型)
数値を表す型は3つのグループに分けられる。
2.1.4.1 整数を表す型(整数型)
1バイトから8バイトまでの大きさいの、符号付きの整数と符号なしの整数がある。
table:表
型 値の範囲
int8 −128~127
int16 −32768~32767
int32 −2147483648~2147483647
int64 −9223372036854775808~9223372036854775807
uint8 0~255
uint16 0~65535
uint32 0~4294967295
uint64 0~18446744073709551615
すべての整数型のゼロ値は0。
2.1.4.2 整数を表す特別な型
byte:uint8の別名
int:CPUによって64 or 32ビットになる
uint:intの符号がないもの
2.1.4.3 整数型の選択
整数型を選ぶときは単純なルールがある。
特定の大きさと特定の符号の整数バイナリのファイルあるいはネットワークプロトコルを処理しているのならば、対応する整数型を使う
すべての整数型について機能するライブラリ関数を書く場合は、ジェネリクスを利用して任意の整数型の引数を扱えるようにする
その他の場合はintを使う
2.1.4.4 整数関連の演算子
四則演算をする場合は、「+」・「-」・「*」・「/」
余剰を計算する場合は、「%」
演算を行い変数に再代入する場合は、「+=」・「-=」・「*=」・「/=」・「%=」
比較する場合は、「==」・「!=」・「>」・「>=」・「<」・「<=」
2.1.4.5 浮動小数点数を表す型(浮動小数点数型)
浮動小数点数型は、2種類ある。
ゼロ値は0。
table:表
型 範囲
float32 1.401298464324817070923729583289916131280e-45〜3.40282346638528859811704183484516925440e+38
float64 4.940656458412465441765687928682213723651e-324〜1.797693134862315708145274237317043567981e+308
2.1.4.6 複素数を表す型(複素数型)
滅多に使われることはない。
2.1.5 文字を表す型
ゼロ値は空文字列("")。
rune型とstring型は別物。
rune型はint32型のエイリアス。
2.1.6 明示的型変換
Goは変数間の暗黙的型変換を行わない。
code:go
var x int= 10
var y float64= 30.2
var sum1 float64= float64(x) + y
var sum2 int = x + int(y)
fmt.Println(sum1, sum2) // 40.2 40
型に対する厳密さは、boolにも適用される。
bool以外の変数などをboolとして扱うことはできない。つまり、非ゼロの数値や空文字列をtrueとして扱えない。
2.1.7 リテラルと型
リテラルは型付けされていない。
浮動小数点数リテラルと整数リテラルで演算したり、整数リテラルを浮動小数点数型の変数に代入できる。
code:go
var x float64= 200.3 * 5
var y float64= 10
ただし制限もある。
文字列リテラルの数値型変数への代入、数値リテラルの文字列変数への代入、浮動小数点数リ
テラルの整数型変数への代入はできない。