はじめに
皆さんGo言語書いてますか?
私も最近Go言語を書き始めました。せっかく学習しているので、私が理解できたところは記事として残そうと思います。
今回はGoの変数についてです。
※作成者はこの記事を爆速(2時間くらい)で作ったため、誤字脱字があると思います。ご了承ください。
※この記事では変数の全てを説明していないので、詳しく知りたい方は公式ドキュメントをご覧ください。
そもそもGo言語とは??
Go言語は、Googleによって開発されたプログラミング言語で、シンプルで効率的な設計が特徴です。Goは、コンパイル速度が速く、メモリ使用量が少ないため、大規模かつ分散したシステム向けの開発に適しています。また、静的型付けとガベージコレクションを組み合わせ、安全で信頼性の高いコードを容易に記述できるようになっています。Goは、シンプルな文法や強力な標準ライブラリなど、開発者が生産性を高めるための機能を提供しています。
ってChatGPTが言ってます。
実際に書いてみて、コードをシンプルに書けると感じます。
[本題] Go言語の変数
変数の宣言
Go言語の型の宣言は2種類あります。
//var 変数名 宣言する型
var i int //int型の初期値は0
//Go言語に型を任せる方法
i2 := 1 //この場合はint型
i3 := "aaa" //この場合はstring型
変数iのように自分で型を宣言する方法と、
変数i2,i3のように型推論のように宣言することができます。
int型
var i int
var i2 int8
var i3 int16
var i4 int32
var i5 int64
int型は整数を扱う型です。
他の言語と同じくint型は使用できます。
Go言語ではビットの指定ができるため、メモリを効率的に使えるのもメリットだと思います。
ビット指定ができる分、最小値と最大値が変わるため、用途によって使い分ける必要があります。
intで宣言するとプラットフォーム依存になるため、その点も注意が必要です。
型 | bit | 最小値 | 最大値 |
---|---|---|---|
int8 | 8 | -128 | 127 |
int16 | 16 | -32768 | 32767 |
int32 | 32 | -2147483648 | 217483647 |
int64 | 64 | -9223372036854775808 | 9223372036854775807 |
int |
int型の注意
各int型は異なる型と扱われるため、計算をする場合は同じ方にする必要があります。
例
var i int
var i2 int8
i = 10
i2 = 10
i3 := i + i2 //型が違うためコンパイルエラーになる
float型
var fl float64
var fl2 float32
fl3 := 1.1 //暗黙的にfloat64になる
float型は浮動小数を扱う型です。
int型と同じく64bit,32bitと指定することができます。
型の指定をしなかった場合は必ず64bitになります。
float型の注意
int型と同じく
各float型も異なる型と扱われるため、計算をする場合は同じ方にする必要があります。
例
var fl float64
var fl2 float32
fl := 1.1
fl2 := 1.1
f3 := fl + fl2 //型が違うためコンパイルエラーになる
bool型
var b bool //初期値はfalse
b2 := true
bool型は真偽値を扱う型です。
特に他の言語との違いは特にないです。
string型
var s string
s = "hello" //文字を代入
s2 := "hello"
string型は文字を扱う型です。
他の言語との違いは特にないです。
byte型
var byteA byte
byteA = 72
fmt.Println(byteA) //72と出力される
fmt.Println(string(byteA)) //「H」と出力される
byte型は文字を数字としてを扱う型です。
byte型をstring()を実行すると、byte型がstring型に変換されます。
今回は72をstring型にして、Hと出力されます。
配列型
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
fmt.Println(arr) //[1 2 3]と出力される
配列型は配列を格納する型です(いきなり小泉構文)
宣言時に要素数を指定して、宣言することができます。
配列型の注意
配列型は他の言語と異なり、要素数を変更することができません。要素数を変更して使う場合はスライスを使う必要があります。
配列を使うときは要素数が変更にならないように実装しましょう!
例
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr = append(arr,1) //要素数が変更できないため、エラーになる
arr := []int{1, 2, 3} //これはスライス
arr = append(arr, 4) //配列に値が挿入される
fmt.Println(arr) //[1 2 3 4]と出力される
interface型
var it interface{}
it = 1
fmt.Println(it) //int型の1が出力される
it = "aa"
fmt.Println(it) //string型のaaが出力される
it = [3]int{1, 2, 3}
fmt.Println(it) //配列型の[1 2 3]が出力
interface型はどの型も代入できる型です。
動的言語みたいな動きができるんですねー
しかし、あくまでinterface型であるため、各型のメソッドや、計算はすることができません。
表示するだけなら問題なく使用することができます。
var it interface{}
it = 1
i := it + 1 //int型ではないため計算できない