公式の A Tour of Go ではじめて Go 言語を触ってみました。
以下、パッケージ・変数・関数について学んだことのメモ。
パッケージ
package
- Goのプログラムはパッケージで構成される
// プログラムは main パッケージから開始される
package main
// "fmt" と "math/rand" パッケージを import
import (
"fmt"
"math/rand" // `package rand` ステートメントで始まるファイル群
)
func main() {
fmt.Println("My favorite number is", rand.Intn(18))
}
import
-
import
ステートメントの書き方- 括弧で複数の
import
を整理する(better) - 複数の
import
ステートメントを書く
- 括弧で複数の
// factored import statement
import (
"fmt"
"math"
)
// multiple import statements
import "fmt"
import "math"
export
- 大文字で始まる名前は、外部のパッケージから参照できる export された名前である
package main
import (
"fmt"
"math"
)
// wrong "undefined: math.pi"
func main() {
fmt.Println(math.pi)
}
// correct
func main() {
fmt.Println(math.Pi)
}
関数
書き方
- 型は後ろに書く
- 複数の引数が同じ型である場合は、最後の型を残して省略できる
func add(x int, y int) int {
// add(x, y int) とも書ける
return x + y
}
複数の戻り値
- 関数は複数の戻り値を返すことができる
package main
import "fmt"
func swap(x, y string) (string, string) {
// 複数の戻り値!
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
名前付き戻り値
- 戻り値となる変数に名前を付けることができる(名前付き戻り値)
- 関数の最初で定義した変数名として扱われる
-
return
ステートメントに何も書かなくてよくなる(Naked return)- 可読性の観点から、短い関数でのみ利用すべき
func split(sum int) (x, y int) {
// x, y が named return values
x = sum * 4 / 9
y = sum - x
return // Naked return
}
変数
基本的な変数宣言
-
var
ステートメントで変数を宣言できる - 複数の変数の最後に型を書くことで、それらの変数を一括で宣言できる
- 初期値が与えられている場合、型は省略可能
var i, j int = 1, 2
短い変数宣言
- 関数の中では
var
の代わりに、短い:=
の代入文を使って暗黙的な型宣言ができる
func main() {
k := 3
fmt.Pringln(k)
}
基本的な型
- bool
- string
- int, int8, int16, int32, int64
- unit, unit8, unit16, unit32, unit64, unitptr
- byte(unit8の別名)
- rune(int32の別名)
- float32, float64
- complex64, complex128
int, uint, uintptr 型は、32-bitのシステムでは32 bitで、64-bitのシステムでは64 bitです
ゼロ値
- 数値型(int, float など):
0
- bool型:
false
- string型:
""
型変換
- T(v) は変数 v をT 型へ変換する
i := 42
f := float64(i)
u := unit(f)
型推論
i := 42 // int
f := 3.142 // float64
u := unit(f) // complex128
定数
- 定数は bool, string, 数値でのみ使える
-
:=
を使って宣言できない
次回