goのチュートリアル
A Tour of GO
時折、コードをいじって、どんなエラーが出るかなどを試しながら、学習しました。
出力
packages.go
package main
# パッケージをインポート
import (
# 出力のためのパッケージ
"fmt"
)
func main() {
# 出力
fmt.Println("Hello World"))
}
パッケージのインポート
packages.go
package main
#複数行で書くこともできる
import "fmt"
import "math"
#こっちの方がスマート
import (
"fmt"
"math"
)
関数と引数
function.go
package main
import "fmt"
#変数の後ろに型名を指定する必要がある
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Pringln(add(20, 30))
}
// 50
#関数の引数が同じ型なら、省略可能
func add(x, y int) int {
return x + y
}
複数の戻り値
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a,b)
}
// "world" "hello"
# Namec return values
* 以下は戻り値の変数が定義されないので、エラーになる
func split(sum int) (int, int) {
a = sum / 2
b = sum / 3
return a, b
}
* 戻り値の変数に名前をつける必要がある
func split2(sum int) (a, b int) {
a = sum / 2
b = sum / 3
return a, b
}
変数
var n int
var c
func main () {
fmt.Println(n)
fmt.Println(c)
}
# int を指定し、何も値を指定しないと初期値は0
// 0
# 型を指定しなかった c はエラーになる
// syntax error: unexpected newline, expecting type
変数の初期値
var i, j int = 1, 2
# 初期値を同時に指定すると、型を宣言しなくて良い
var a, b = 10, 11
var c, python, java = true, false, "no"
func main() {
fmt.Println(i, j)
fmt.Println(a, b)
fmt.Println(c, python, java)
}
// 1 2
// 10 11
// true false no
変数の定義と代入
func main() {
a := "hello"
k := 3
fmt.Println(a)
fmt.Println(k)
}
// hello
// 3
# func main()の外で := を使って、代入するとエラー
# ok
var a strint = "hello"
# ng
b := "hello"
func main() {
fmt.Println(a)
fmt.Println(b)
}
# a は OK
// hello
# b はエラーになる
// syntax error: non-declaration statement outside function body
各変数の初期値
func main() {
var i int
// 0
var f float64
// 0
var b bool
// false
var s string
// ""
...
}
型の変換
var i int = 32
var f float64 = float64(i)
var u uint = uint(f)
i := 32
f := float64(i)
u := uint(f)
型の確認
func main() {
v := 100
fmt.Printf("%T\n", v)
s := "hello"
fmt.Printf("%T\n", s)
}
// v
> int
// s
> string
定数の宣言
func main() {
const Say = "hello"
fmt.Println(Say)
#再代入できない
Say = "Hey"
// cannot assign to Say
}
> "hello"