🚕

【Go言語学習#1】~基本型・定数・宣言~

2023/10/13に公開
1

何か一つの言語を集中して学びたいと思い、言語使用がシンプルなGo言語を学習することに決めました。
今回は基本型・変数宣言について学習した内容をまとめていきます。

参考書籍
https://www.amazon.co.jp/初めてのGo言語-―他言語プログラマーのためのイディオマティックGo実践ガイド-Jon-Bodner/dp/4814400047/ref=sr_1_3?__mk_ja_JP=カタカナ&crid=10ATO9S071IOJ&keywords=Go言語&qid=1697032776&s=books&sprefix=go言語%2Cstripbooks%2C197&sr=1-3

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 // <-- 型を明示的に指定

参考

https://www.amazon.co.jp/初めてのGo言語-―他言語プログラマーのためのイディオマティックGo実践ガイド-Jon-Bodner/dp/4814400047/ref=sr_1_3?__mk_ja_JP=カタカナ&crid=10ATO9S071IOJ&keywords=Go言語&qid=1697032776&s=books&sprefix=go言語%2Cstripbooks%2C197&sr=1-3

GitHubで編集を提案

Discussion