Go Tour
ブラウザ上でもできるけど、Go言語をインストールすればローカルでもGo Tourが実行できるらしい。
せっかくだからローカルでやってみようかな。
ダウンロードは済んでいるので、コマンドラインで以下のコマンドを実行。
go tool tour
動かない。
もう一つ記載されているコマンドを実行。
go get github.com/atotto/go-tour-jp/gotour
gotour
やっぱり動かない。
仕方ないので別サイトを調べてみる。
このサイトのやり方でうまくいきました。
完了すると、ブラウザ上にA Tour og Goが立ち上がる。
Go言語の構成
パッケージ(package
)で構成されていて、main
パッケージからプログラムが実行される。
package main
ファイルの一番上に書いているのがそれかな?
でもって次の行から、実行したいパッケージの名前を記載してインポートしている。
import (
"fmt"
"math/rand"
)
これでこのパッケージのメソッドとかを使えるって感じっぽい。
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
// 実行結果
My favorite number is 7
割とシンプルそう。
個別でインポートすることも可能。
import "fmt"
import "math"
外部のパッケージへのエクスポート方法
export ~
みたいな前置きは必要なくて、大文字から始めればいいだけ。シンプル過ぎん?
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.pi)
}
// 実行結果
./prog.go:9:19: undefined: math.pi
func main()
内のpi
は大文字で始まっていないのでエラーになってしまう。
Pi
に置き換えれば実行可能。
関数(メソッド)
基本的な書き方は、ほかの言語とだいたい一緒。
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
引数とることもできる。
型宣言は変数名の後ろに書けばOK。
func add(x, y int) int {
return x + y
}
2つ以上の引数が同じ型なら、最後の型だけ残せばいい。
func swap(x, y string) (string, string) {
return y, x
}
複数の戻り値を返すことも可能。なんと…
最初のカッコに引数を、そのあとのカッコに戻り値を記載できるみたい。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
戻り値に変数名を記載し、その変数名を関数内で使用すると、return
に何も書かずとも変数を自動的に戻り値として認識してくれる。便利。。。
ただし長い関数で使うのは非推奨。可読性が悪くなるので。
変数
他の言語にもあるように、変数の頭にはver
を付ければOK。
var c, python, java bool
一気にいろんな変数に代入することもできる。
var c, python, java = true, false, "no!"
変数宣言と一緒に値も代入すれば、型を省略して書くこともできる。
その場合、最初に代入された値が持つ型が自動で設定される。
k := 3
関数の中だけは:=
を使って、暗黙的な型宣言ができる。
Go言語の基本型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す
float32 float64
complex64 complex128
bool
string
int
辺りは分かるけど、それ以外がよくわからんな…float
は小数点?
i1 int = 10 // 符号あり 実行アーキテクチャに依存(32bit or 64bit)
i2 int = 1e9 // 10の9乗(=1000000000)
i3 int16 = 10 // 符号あり 最小:-32768 最大:32767
i4 int32 = 10 // 符号あり 最小:-2147483648 最大:2147483647 (約20億)
i5 int64 = 10 // 符号あり 最小:-9223372036854775808 最大:9223372036854775807 (約900京)
i6 uint = 10 // 符号なし 実行アーキテクチャに依存(32bit or 64bit)
i7 uint32 = 10 // 符号なし 最小:0 最大:4294967295 (約40億)
変数に初期値を与えない場合、ゼロ値が与えられる。
数値型(int,floatなど): 0
bool型: false
string型: ""
(空文字列( empty string ))
型名(変数名)
で型変換ができる。
var z uint = uint(f)
もし型名を指定しない場合、代入した値の型から型推論がおこなわれる。
var i int
j := i // j is an int
定数
おなじみconst
で定義。
const World = "世界"
基本的な定義とかはこのあたりで終わりかな。