Progate Go

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 のときと解釈される。
    • casebreak 無しで終えると, 自動で break が付与される。
package main
func main() {
    var hoge int = 10 // 変数の初期化
    println("Hello", "World") // 標準出力は Python に近い
    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 よりも先に書く
import "fmt" // fmt 標準パッケージのインストール
func main(){ //ファイル実行時に呼び出される関数。
    fmt.Println("hoge") // 自動で改行される
    fmt.Printf("%s is Hoge, %s is Fuga\n", "Hoge", "Fuga") // 自動で改行されない
}
  • for i:=0; i<3 ;i++ {処理} のように, forC++ から条件の括弧を取った形。
    • var i int = 0 と初期化するとエラーになるので, 必ず := の省略形を使う

Go III

  • fmt.Scan(&変数名): 標準入力を受け取って変数に代入する(変数のポインタを渡している)
  • 関数の特筆事項
    • 利用するより先に定義しなくてもよい。(変数は先に定義する必要)
    • 引数は値渡し
// 関数定義 fn2("hoge") で呼び出せる。
func fn2(s string) string { // 引数や戻り値の型の指定は TypeScript に近い
    // s は値渡し。
    return s + s
}

Go IV

  • 変数のポインタは &変数名 で得られる。Type のポインタの型は *Type
    • Type* ではない。
    • var intPtr *int = &intNum としたとき, *intPtrintPtr の指す変数(すなわち intNum)と同一になる。