2章 基本型と宣言
SQ3R
Scan
- ゼロ値
- リテラル
- 論理型
- 数値型
- 文字列型とrune型
- 明示的型変換
- 変数の宣言
- 定数
- 型付きの定数と型なしの定数
- 未使用変数
- 変数と定数の名前
Question
- ゼロ値とは何か、各変数型のゼロ値は何になるか?
- リテラルには何があるか?
- 数値型には何があるか?
- rune型とは何か?
- 型変換はどう行うか?
- 変数の宣言はどう行うか?
- 変数と定数の違いは何か?
- 型のない定数とは?
- 未使用変数とは?
- 変数と定数の名前には何の意味があるのか?
3R
ゼロ値とは何か
- ゼロ値:宣言されたが値が割り当てられていない変数に対して割り振られる、デフォルトの値のこと
- 明示的なゼロ値があると初期化が不要になるため、コードがクリアになりCやC++でありがちなバグを回避できる
- CやC++でありがちなバグ:初期化が行われず、メモリ内のどこかにある以前のデータの痕跡が代入されてしまう
- 宣言:変数の値を記録するためのメモリ領域を用意すること
- 明示的なゼロ値があると初期化が不要になるため、コードがクリアになりCやC++でありがちなバグを回避できる
各変数型のゼロ値は何になるか?
リテラルとは何か?
- 数値や文字、文字列を直に示したもの
- Go言語には4つのリテラルが存在する
リテラルには何があるか?
- 整数リテラル
- いわゆるint
- 通常は10進数を表す
- 先頭に
0b
を置くと2進数、0o
を置くと8進数、0x
を置くと16進数になる - 整数リテラルの間に
_
を挟むことができる。桁数などをぱっと見でわかりやすくするために使うと良い。1_500_000
,1111_0010_0101_1010
,FF_FF_10_9B
- 浮動小数点リテラル
- いわゆるfloat
3.14
のような小数表示、1.23e20
のような指数表示が可能- 浮動小数点リテラルでも
_
を挟むことができる
- runeリテラル
- 文字を表すリテラル
- runeリテラルは
''
で区切られる。 - Go言語は
''
と""
の扱いが違うので注意 - runeリテラルには次の形式がある
- 1文字のUnicode文字:
'a'
- 8ビット8進数:
\141
- 8ビット16進数:
\x61
- 16ビット16進数:
\u0061
- 32ビットUnicode:
U00000061
- 改行:
\n
- タブ:
\t
- 1文字のUnicode文字:
- 文字列リテラル
- 解釈済み文字列リテラル、生の文字列リテラルの2種類がある
- ほとんどは
""
で解釈済み文字列リテラルで作成する - 生の文字列リテラルは`で囲んで作成する
\
,改行,"
を含めたい時に使う
数値型には何があるか?
- 全部で12種類ある。大きく分けると3つのタイプに分けることができる
- 整数型
- 符号付きint8~64,符号なしuint8~64の8種類がある
- 特殊な整数型(byte,int,uint)も存在する
- 浮動小数点型
- float32,float64の2種類がある
- 基本はfloat64を使う
- 金融系の処理など、誤差が許容できないのならそもそも浮動小数点型を使わない
- 複素数型
- complex64,complex128の2種類がある
- 整数型
整数型はどのように選択すれば良いか?
- 特定の大きさ・符号の整数バイナリファイル、ネットワークプロトコルを処理する場合は、対応するビット数の整数型を使う
- 全ての整数型について機能するライブラリ関数を書く場合はint64,uint64で2つの関数を作成する
- それ以外はint型を使う
型変換はどう行うか?
- Goでは暗黙的な型変換を行わない
- 変数間で型が違う場合は明示的に型変換を行う必要がある
- 数値型でサイズが異なるだけの場合(int8とint64など)も型変換が必要
var a int = 10
変数の宣言はどう行うか?
変数と定数の違いは何か?
型のない定数とは?
- 未使用変数とは?
- 変数と定数の名前には何の意味があるのか?