Open9

Go: Basic

cordeliacordelia

Packages

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

Imports

import "fmt"
import "math"

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

Exported names

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

cordeliacordelia

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

戻り値に名前をつけることができる。

https://go-tour-jp.appspot.com/basics/7

cordeliacordelia

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 ""
}
cordeliacordelia

Constants

定数はconstを使って宣言する。:=で定義することはできない。
定数は、

  • character
  • string
  • boolean
  • numeric
package main

import "fmt"

const Hello = "Hello"

func main() {
	const World = "World"
	fmt.Println(Hello, World)
}


Numeric constants

https://go-tour-jp.appspot.com/basics/16

cordeliacordelia

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)
}