Packages, variables, and functions.
Packages
Goのプログラムは、パッケージで構成されている。
プログラムは main パッケージから開始される。
以下はfmt, math/randパッケージをインストールされているかつ、mainパッケージが実行される。
code:go
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
Exported names
最初の文字が大文字で始まる名前は、外部のパッケージからアクセスできる。
code:go
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.pi) // undefined: math
}
Functions
関数は0個以上の引数を取ることができる。
変数名の後ろに型名を書く。
code:go
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
Functions continued
関数の2つ以上の引数が同じ型である場合は、最後の型を残して省略できる。
code:go
package main
import "fmt"
func add(x, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
Multiple results
関数は複数の戻り値を返すことができる。
code:go
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ステートメントに何も書かずに戻り値を返せる。
ただし、これは短い関数でのみ利用推奨。長い関数で使うと可読性が落ちるので注意。
code:go
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))
}
Short variable declarations
関数の中でのみ、var宣言の代わりに、短いの:=代入分を使える。
Type conversions
変数v、型Tがあった場合、T(v)は、変数vをT型へ変換する。
code:go
package main
import (
"fmt"
"reflect"
)
func main() {
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
fmt.Println(reflect.TypeOf(i))
fmt.Println(reflect.TypeOf(f))
fmt.Println(reflect.TypeOf(u))
}