go覚え書き

はじめに

go langを勉強する上でのチラ裏をまとめておく。

コロンイコール

A tour of Goで最初につまずいた謎の記号
:= コロンイコール

実際のサンプルコードは

package main

import "fmt"

func swap(x, y) (string, string) {
    return y, x
}

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}

これは宣言代入で呼ばれるもので関数内で変数を宣言せずに利用するためのもの。値も代入される。グローバルスコープの変数はvarの宣言が必須。上の例では下記のように変数に格納される。

a = "world"
b = "hello" //swapされているので

short variables

上のセミコロンに関係して、関数内での宣言を省略することができる

package main

import "fmt"

func main() {
    var i, j int = 1, 2
    k := 3
    c, python, java := true, false, "no!"

    fmt.Println(i, j, k, c, python, java)
}

この例での実行結果は下記になる

1 2 3 true false no!
/*
i = 1, j = 2, k =3
c = true, python = false, java = "no!"
*/

セミコロンイコールを利用したfor文

for文の初期化ステートメントも同様に:=で省略できる

for i := 0; i < 10; i++ {
        sum += i
    }

fmtパッケージの書式

%v   デフォルトフォーマットを適用した値
    構造体を出力する際、+フラグ(%+v)を加えるとフィールド名が表示される
%#v この値をGo言語の構文で表現する
%T  この値の型をGo言語の構文で表現する
%q  Go言語の構文に従いダブルクォート形式でエスケープ

なのでこのコードを動かすと

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