Open9
Go: Basic

Packages
- Goはpackageで構成される
- プログラムはmain packageから開始される

Imports
import "fmt"
import "math"
// まとめて書く方が素敵
import (
"fmt"
"math"
)

Exported names
名前の先頭が大文字で始まるものは、外部から参照できる。

Functions
関数宣言と呼び出し。引数と関数の戻り値にデータ型を書く。
func add(x int, y int) int {
return x + y
}
fmt.Println(add(1, 2))
2つ以上の引数が同じ型だった場合は、1つに省略できる。
func add(x, y int) int {}
Multiple results
関数は複数の戻り値を返せる。
// 渡した引数の順番を入れ替える
func swap(x, y string) string (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
// => world hello
Named return values
戻り値に名前をつけることができる。

Variables
var
で変数を宣言する。複数宣言も可能で、型が同じなら最後に1つ書くだけでよい。
var c, python, java bool
func main() {
var i int
fmt.Println(i, c, python, java)
}
// => 0 false false false
Initializers
varで宣言した変数には初期化子を与えることができる。その場合は型を省略でき、初期化子の型が付く。
// 型を明示する時
var i, j int = 1, 2
// 型を省略できる時
var c, python, java = false, true, "java"
Shor variable declarations
関数内に限り、var
の変わりに:=
で変数宣言、初期化、初期化子が持つ型付与を行える。
package main
import "fmt"
func main() {
// 通常
var x int = 1
// short
y := 2
fmt.Println(x, y)
// => 1 2
Basic types
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
(int, uint, uintptr は32-bitシステムでは32bitに、64-bitシステムでは64bitになることに注意)
byte // uint8 の別名
rune // int32 の別名。Unicode のコードポイントを表す
float32 float64
complex64 complex128
整数に関しては、サイズや符号なし( unsigned )整数の型を使う必要があるなどの特別な理由がない限りはint
を使う。
Factored variable declarations
var
を使った変数宣言はimport
のようにまとまった書き方もできる。
var (
Success bool = false
MaxInt int = 100
Greeting = "hello"
)
Zero values
varでの変数宣言で明示的に初期化しない場合は、型ごとのzero valueで初期化される。
数値型: 0
bool型: false
string型: ""(空文字)
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
// => 0 0 false ""
}

Type conversions

Type inference

Constants
定数はconst
を使って宣言する。:=
で定義することはできない。
定数は、
- character
- string
- boolean
- numeric
package main
import "fmt"
const Hello = "Hello"
func main() {
const World = "World"
fmt.Println(Hello, World)
}
Numeric constants

For
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
for continued
初期化と後処理はなくてもok
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}