2章 事前宣言された型
2.1 あらかじめ宣言された型
Goが事前に準備している型を事前宣言された型(predeclared type)という
2.1.1 ゼロ値
変数が宣言されたが、代入されていない場合でデフォルトでゼロ値が与えられる
2.1.2 リテラル
整数リテラル
整数リテラルとは数字の並びのデータことを指す。
0bで2進数(binary)、0oで8進数(octal)、0x(hexadecimal)で16進数扱いになる
数字の間に_アンダースコアを入れることもできる。あくまでわかりやすい目的として使用する。
Ex)10進数の値を三桁ごとにくくったり
浮動小数点数リテラル
小数点ありの数字を指定することが可能
3.14や6.03e23みたいな指数を使った値も指定が可能。
0xをつけることで16進数も表現が可能
pを使うことで冪乗も使用できる
Ex 0x12.34p5の場合は、10進数で12.34の5乗(=582.5)になる
rune リテラル
'シングルコーテーションで括った文字列を指定する
以下の値は全て97で表現される値になる
code:go
fmt.Println('a') // 一文字のUnicode文字
fmt.Println('\141') // 8ビットの8進数
fmt.Println('\x61') // 8ビットの16進数
fmt.Println('\u0061') // 16ビットの16進数
fmt.Println('\U00000061') // 32ビットのUnicode
使用するユースケースとしては、パーミッションフラグ(8進数)やネットワークのアプリケーション(2進数)で使用する
基本的には数値を用いた表現する場合は、避けたほうがいい
文字列リテラル
ダブルコーテーションを使った実現する
解釈対象の文字列リテラル(interpreted string literal)
\n・ " ・改行などを解釈してくれる文字列を指す
code:go
fmt.Println("山田\n太郎")
// 山田
// 太郎
ロー文字列リテラル(raw string literal)
バッククオートを使って実現する方法
\n・ "などはそのまま表示される
code:go
fmt.Println(`"山田\n
太郎"`)
// "山田\n
// 太郎"
2.2 変数の宣言
変数の宣言には複数の方法がある
varを使うパターン
基本系
code:go
var x int = 10
代入する値が想定する値になっている場合は、型指定を省略できる
code:go
var x = 10
変数を宣言してゼロ値を入れる場合は=を省略できる
code:go
var x int // 0
一つのvarを用いて同時に変数を宣言できる
code:go
var x, y int = 10, 20
var x, y int // 代入する値がない場合はゼロ値
var x, y = 10, "hello" // リテラルも対応
一つのvarで複数の宣言を行う方法で宣言リストというものがある
code:go
var (
x int
y = 20
z int = 30
d, e = 40, "hello"
f, g string
)
:=を使うパターン
基本系
code:go
x := 10
リテラル型の宣言を同時に行う方法
code:go
x, y := 10, "hello"
:=を使うことで値の再代入が可能
code:go
x := 10
x, y := 30, "hello" // xの値が30で再代入される
使い分け
関数内部のみで使用する場合は:=を使用する。(基本的にはこれを使用する。)
グローバルで値を管理したい、パッケージレベルで管理したい場合は、宣言リストを使う。
ゼロ値を使いたい場合はvarを使用する。意図を名確にdけいる
リテラル型を記載する時には、型定義してvarで書くほうがイディオム的
:=を用いた場合、変数宣言なのか再代入なのかがわかりづらいので、この場合はvarを使った=で代入する
varや:=を使って複数の変数を定義する時には、関数の戻り値を代入するときだけにする