Goの旅行記(A Tour Of Go)
Packages
Goのプログラムはpackageで構成される
プログラムはmainパッケージから開始される
パッケージとは関連するGoのコードをまとめるための単位である
全てのGoファイルは、最初の行でパッケージ名を宣言する
イメージ
myapp/
├── main.go (package main)
├── utils/
│ └── math.go (package utils)
└── models/
└── user.go (package models)
Imports
Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前
Functions
変数名の後ろに型名を定義する
func add(x int, y int) int {
return x + y
}
// 型が同一の場合は省略もできる
func add(x, y int) int {
return x + y
}
Multiple results
関数は複数の戻り値を返すことができます。
func swap(x, y string) (string, string) {
return y, x
}
Named return values
戻り値に名前をつけることができる
戻り値の意味を示す名前にすることで、関数のドキュメントとして表現する
名前付きの戻り値を利用すると、returnステートメントに何も書かずに戻すことができる(naked return)
処理の長い関数の場合、naked return ステートメントは可読性が下がるので注意が必要⚠️
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
// x, y intが返却される
return
}
Variables
var ステートメントは変数を宣言することができる
複数の変数の最後に型を書くことで変数のリストを宣言できる
// bool型の変数リスト
var c, python, java bool
Variables with initializers
var 宣言では、変数毎に初期化子(initializer)を与えることができる
初期化子が与えられている場合は型を省略できる
var i, j int = 1, 2
// 省略パターン
var c, python, java = true, false, "no!"
Short variable declarations
関数内ではvarの代わりに、:=の代入文で暗黙的な型宣言ができる
関数外ではキーワードで始まる宣言が必要
func main() {
var i, j int = 2, 3
k := 5
c, python, java := true, false, "no!"
// ~~~以下省略~~~
}
Basic types
Go言語の基本型は以下
bool
string
// 符号あり整数
int int8 int16 int32 int64
// 符号なし整数
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す
float32 float64
complex64 complex128
Zero values
変数に初期値を与えずに宣言すると、ゼロ値(zero value)が与えられる
ゼロ値は型によって以下のように与えられる
- 数値型(int,floatなど):
0 - bool型:
false - string型:
""(空文字列( empty string ))
Type conversions
変数 v 、型 T があった場合、 T(v) は、変数 v を T 型へ変換する
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
i := 42
f := float64(i)
u := uint(f)
Type inference
明示的な型を指定せずに変数を宣言する場合( := や var = のいずれか)、変数の型は右側の変数から型推論される
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128
Constants
const キーワードを使って変数と同じように宣言
定数は、文字(character)、文字列(string)、boolean、数値(numeric)のみで使える
定数は := を使えない
const Pi = 3.14
Numeric Constants
型のない定数は、その状況によって必要な型を取る
Discussion