Go I
go fmt ファイル名
でフォーマットできるらしい。
- 文法の特筆事項
- コメントは
//
または /* */
- 文末セミコロンなし
- 13/3 -> 4
- 数値, 文字列, 真理値 とその演算あたりは C++やJava とほぼ同じ。
- 変数定義は
var 変数名 変数型
。初期化しなくてもよい。
- 初期化は
var hoge int = fuga
であるが, 型は省略可能。(TypeScriptに近い)
- 特に,
var hoge = 10
など自明なとき。
- さらに, 上は
hoge := 10
と省略して定義することもできる。
hoge = 10
は定義済み変数に対する代入。
- 変数型
- 文字列は
string
型 (+
で連結できる)で, ダブルクォート限定。
int
- 変数関連エラー
- 現時点で未定義な変数の呼び出し
- 定義済み変数の再定義
- 定義済み変数の未使用
- 変数に対して定義された時と違う型を代入
if 条件 {処理} else if 条件 {処理} else {処理}
で条件に括弧不要
switch 式 {処理}
も同様に式に括弧不要
case 3,5:
とすれば 3または5 のときと解釈される。
case
を break
無しで終えると, 自動で break
が付与される。
package main
func main() {
var hoge int = 10
println("Hello", "World")
if hoge > 10 {
println(hoge)
}
}
Go II
- 使用しないパッケージをインストールするとエラーになる。
- パッケージ
fmt
: 出力関連
fmt.Println()
: println()
より表示できるデータ型の種類が多い
fmt.Printf()
: 書式付き出力。第2引数以降にに埋め込む値を並べる。
%s
: 文字列, %d
: 整数
- 型が違うとエラーになる。
math/rand
: 乱数関連。import "math/rand"
rand.Intn(10)
: 0,1,2,...,9 の乱数を生成して返す。
import "time"
したうえで rand.Seed(time.Now().Unix())
を最初に呼び出すとよい。
package main
import "fmt"
func main(){
fmt.Println("hoge")
fmt.Printf("%s is Hoge, %s is Fuga\n", "Hoge", "Fuga")
}
for i:=0; i<3 ;i++ {処理}
のように, for
も C++ から条件の括弧を取った形。
var i int = 0
と初期化するとエラーになるので, 必ず :=
の省略形を使う
Go III
fmt.Scan(&変数名)
: 標準入力を受け取って変数に代入する(変数のポインタを渡している)
- 関数の特筆事項
- 利用するより先に定義しなくてもよい。(変数は先に定義する必要)
- 引数は値渡し
func fn2(s string) string {
return s + s
}
Go IV
- 変数のポインタは
&変数名
で得られる。Type
のポインタの型は *Type
Type*
ではない。
var intPtr *int = &intNum
としたとき, *intPtr
は intPtr
の指す変数(すなわち intNum
)と同一になる。