GO日記#2 A tour of Go.

A tour of Goの続き:

  • 大文字で始まる関数は、外部から参照できるExported name.
     Exported nameの場合、コメントの付与をコンパイラから推奨される。
  • 関数の型名は後ろに書く...直感的には気持ち悪い。
     理由は↓にあるらしい。後で読む。  blog.golang.org

  • 変数型名の省略が可。//これが有効な場面とは?

  • := は、型の省略ができる変数定義 //後で出てくる。
  • 関数は複数の戻り値を返せる
package main

import "fmt"

func swap(x, y string) (string, string) {
    return y, x // 複数の戻り値
}

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}
  • Named return value. "Naked" return  returnには何も書かず、冒頭で定義した変数が戻る。  関数の冒頭で、何が戻るか判るから可読性が向上する? こういう書き方もできると知っておけばよい気がする。  A tour of Goの説明にもあるように、一目でわかるレベルの関数であれば有効か。(5行程度までかな。)
package main

import "fmt"

func split(sum int) (x, y int) { //ここで定義
    x = sum * 4 / 9
    y = sum - x
    return //ここは何も書かなくとも、x,yが戻り値になる。
}

func main() {
    fmt.Println(split(17))
}
  • var 変数宣言を、一度に行える。
package main

import "fmt"

var c, python, java bool //ここ。

func main() {
    var i int
    fmt.Println(i, c, python, java)
}
  • 初期化子 Initilaizer  初期化子が持つ型によって、型宣言を省略できる。  // 何がうれしいの?いつうれしいの?デメリットは?
package main

import "fmt"

var i, j int = 1, 2

func main() {
    var c, python, java = true, false, "no!" //型宣言の省略
    fmt.Println(i, j, c, python, java)
}
  • :=  変数定義かつ初期化が可能  関数の中限定 //なんで?
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)
}