はじめに
A Tour of Goについて勉強になった箇所をまとめる。
パッケージ参照
最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前。
パッケージをインポートすると、そのパッケージがエクスポートしている名前を参照することができる。
エクスポートされていない名前(小文字ではじまる名前)は、外部のパッケージからアクセスすることはできない。
↓ Pi は math パッケージでエクスポートされている。
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
引数の型定義の省略
関数の2つ以上の引数が同じ型である場合には、最後の型を残して省略して記述できる。
x int, y int
を x, y int
へ省略している。
package main
import "fmt"
func add(x, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
複数の戻り値
関数は複数の戻り値を返すことができる。
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)
}
Named return values
名前をつけた戻り値の変数を使うと、 return ステートメントに何も書かずに戻すことができる。
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}
変数
変数のリスト
var
では複数の変数の最後に型を書くことで、変数のリストを宣言できる。
package main
import "fmt"
var c, python, java bool
func main() {
var i int
fmt.Println(i, c, python, java)
}
初期化子
初期化子が与えられている場合は型を省略でき、その変数は初期化子が持つ型になる。
package main
import "fmt"
var i, j int = 1, 2
func main() {
var c, python, java = true, false, "no!"
fmt.Println(i, j, c, python, java)
}
暗黙的な型宣言
関数の中では、 var
宣言の代わりに、短い := の代入文を使い、暗黙的な型宣言ができる。
※関数の外では、キーワードではじまる宣言( var, func, など)が必要で、 := での暗黙的な宣言は利用できない
package main
import "fmt"
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
基本型一覧
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す
float32 float64
complex64 complex128
ゼロ値
変数に初期値を与えずに宣言すると、ゼロ値( zero value )が与えられる。
ゼロ値は型によって以下のように与えられます:
数値型(int,floatなど): 0
bool型: false
string型: "" (空文字列( empty string ))
型変換
変数v
、型T
があった場合、 T(v)
は、変数v
をT
型へ変換する。
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
/// 3 4 5
型推論
明示的な型を指定せずに変数を宣言する場合( := や var = のいずれか)、変数の型は右側の変数から型推論される。
package main
import "fmt"
func main() {
v := 42 // change me!
fmt.Printf("v is of type %T\n", v)
}
/// v is of type int
定数
定数( constant )は、 const キーワードを使って変数と同じように宣言する。
文字(character)、文字列(string)、boolean、数値(numeric)のみで使える
定数は:=
を使って宣言できない。
package main
import "fmt"
const Pi = 3.14
func main() {
const World = "世界"
fmt.Println("Hello", World)
fmt.Println("Happy", Pi, "Day")
const Truth = true
fmt.Println("Go rules?", Truth)
}
/// Hello 世界
/// Happy 3.14 Day
/// Go rules? true