🚕
【Go言語学習#1】~基本型・定数・宣言~
何か一つの言語を集中して学びたいと思い、言語使用がシンプルなGo言語を学習することに決めました。
今回は基本型・変数宣言について学習した内容をまとめていきます。
参考書籍
Goの基本型
Go言語の基本型は以下のようなものがあります。
- 数値型
- 整数型
- 浮動小数型
- 複素数型(紹介は割愛)
- 文字列型
- 論理型
数値型
数値を表す型は12種類あります。
整数型
CPUのアーキテクチャ(32bit/64bit)によって値の範囲が変化する型とそうでないものがあります。
以下の型はサイズが一定
型 | 値の範囲 |
---|---|
int8 | -128~127 |
int16 | -32768~32767 |
int32 | -2147483648~2147483647 |
int64 | -9223372036854775808~9223372036854775807 |
uint8(byte) | 0~255 |
uint16 | 0~65535 |
uint32 | 0~4294967295 |
uint64 | 0~18446744073709551615 |
以下の型はCPUアーキテクチャによってサイズが可変します。
型 | サイズ | 符号 |
---|---|---|
byte | 8bit(uint8のエイリアス) | なし |
int | 32bit/64bit | なし |
uint | 32bit/64bit | あり |
uintptr | ※ | ※ |
ゼロ値は0
です。
浮動小数点型
float32とfloat64の2種類で、ゼロ値は0
です。
型 | 最大 | (非ゼロ)最小 |
---|---|---|
float32 | 3.402823...e+38 | 1.4012984...e-45 |
float64 | 1.797693...e+308 | 4.9406564...e-324 |
演算
割り算の結果は整数になります。
resu := 10 / 3
fmt.Print("resu is %d", resu) // <-- resu is 3(切り捨て)
fmt.Printf("resu type is %T", resu) // <-- resu type is int
異なる型同士の演算はできません。
var x int = 10
var y byte = 20
sum := x + y // <- invalid operation: x + y (mismatched types int and byte)
// 演算するには型を明示する
sum := byte(x) + y
文字列型
Goの文字列はイミュータブルです。
ゼロ値は""(空文字)
です。
var s string
fmt.Printf("%s", s) // <-- 何も表示されない(空文字)
論理型
ゼロ値はfalse
です。
var b bool
fmt.Print("%b", b) // <-- false
変数の宣言
varを使った初期値と型の宣言
var n int = 10
型宣言を省略すると右辺の値から型を推測してくれます。
整数リテラルのデフォルト型はint
なのでnはint型となります。
var n = 10
初期値を指定しない場合はゼロ値
が初期値として設定されます。
var n_z int
var s_z string
var f32_z float32
var f64_z float64
var b_z bool
fmt.Printf("int_zero --> %d\n", n_z)
fmt.Printf("string_zero --> %s\n", s_z)
fmt.Printf("float32_zero --> %f\n", f32_z)
fmt.Printf("float64_zero --> %f\n", f64_z)
fmt.Printf("bool_zero --> %t\n", b_z)
出力
int_zero --> 0
string_zero -->
float32_zero --> 0.000000
float64_zero --> 0.000000
bool_zero --> false
同時に複数の初期値を代入することも可能です。
var x, y int = 10, 20
右辺を定義しない場合は複数の変数にゼロ値が設定されます。
var x, y int // <-- ゼロ値が入る
varでの宣言よりも短い構文として:=
が用意されています。使用頻度としてはこちらの方が高いです。
:=
は関数内でのみ使用できます。
x := 10 // <-- var x int = 10と同じ
複数代入
x, y := 10, 20
varと:=の使い分け
var
を使用する場合
- パッケージレベルで変数を宣言する
- ゼロ値に初期化する
- 既存の変数を再利用する
-
:=
では既存の変数に代入もできるため、それが新しいものなのか既存のものなのか判断しづらい
-
- リテラルのデフォルト型以外の型で変数に代入する
// デフォルト型はintだがfloatを使いたい
var x float32 = 100
:=
を使用する場合
- 関数内かつ
varを使用する場合
以外
定数
以下のように宣言可能です。
const x = 10
const x_i int = 10 // <-- 型を明示的に指定
参考
Discussion
💫