サイト
Packages
Goのプログラムはパッケージで構成する。
package main
はmainパッケージから実行される
パッケージ名はimportパスの最後の要素名とする
import
他のプログラムやライブラリをimportする
Exported names
Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前となる。小文字で始まる名前は、外部のパッケージから参照できない。
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.pi) // 参照できない
fmt.Println(math.Pi) // 参照できる
}
Functions
構文
関数は、0個以上の引数を取ることができる。
型は引数名の後ろに、戻り値の型は引数の後ろに書く。
func 関数名(引数1 引数1の型, ・・・) 戻り値の型 {
処理
}
func add(x int, y int) int {
return x + y
}
引数
2つ以上の引数が同じ型である場合には、最後の型を残して省略できる。
func add(x, y int) 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)
}
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))
}
Variables
構文
varステートメントで変数を宣言する。最後の変数の後ろに型を宣言する。
変数には初期値を定義できる。
package main
import "fmt"
var c, python, java bool
var k, j int = 1, 2
func main() {
var i int
fmt.Println(i, c, python, java)
fmt.Println(k,j)
}
省略方式
関数の中では、var宣言の代わりに短い :=
の代入文を使い、暗黙的な型宣言ができる。
関数の外では、キーワードではじまる宣言( var, func, など)が必要で、 :=
での暗黙的な宣言は利用できない。
in
package main
import "fmt"
// 関数の外ではvarが省略できない
//n := 10
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 真偽値(true/false) 初期値false
- string 文字型 初期値""
- int 数値型 初期値0
- float32 浮動数値型 初期値0
型変換
Goでの型変換は明示的な変換が必要。
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)
}
型推測
明示的な型を指定せずに変数を宣言する場合( :=
や var =
のいずれか)、変数の型は右側の変数から型推論される。
右側の変数が型を持っている場合、左側の新しい変数は同じ型になる。
右側に型を指定しない数値である場合、左側の新しい変数は右側の定数の精度に基いて int, float64, complex128 の型となる。
package main
import "fmt"
func main() {
i := 42
fmt.Printf("i is of type %T\n", i)
f := 3.14
fmt.Printf("f is of type %T\n", f)
c := 0.867 + 0.5i
fmt.Printf("c is of type %T\n", c)
}
定数
定数は、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)
}