2023/04/14

暗黙のGolang

Golangの世界では常識的なことだし、効率の良い話なのだけど、外から見ると暗黙的に見えるクセつよポイント。春のgolangおさらい祭り。

大文字小文字がグローバルかプライベートかを表す

変数や関数がpackageの外に公開されるかが、変数名や関数名の最初の文字が大文字か小文字かによって決まる。非常に効率が良い。が、暗黙的。他の言語の関数名を見たときに気になってしまう。そうとしか見えなくなる。

`` //ThisIsGlobalFunctionは関数名の先頭文字T` が大文字なのでグローバルに呼べる func ThisIsGlobalFunction() { Println("Global") }

// thisIsPrivateFunction は関数名の先頭文字 t が小文字なのでpackage内だけで呼べる func thisIsPrivateFunction() { Println("Private") } ```

構造体structのフィールド名も同じで大文字小文字で外から読めるかが決まる。Shiftキーめっちゃ押す。

変数名の代わりのアンダースコア

Goは変数に値を代入したあと、何も使用しないままだとコンパイルが通らない。 なので関数の返り値を受け取ってそのあと使わずに終わるというのが許されない。そんなとき、_ アンダースコアで返り値を受ける。

``` // err を受けるアンダースコア(errハンドリングしましょうね) f, _ := os.Open(o.file)

// range のイテレータを使わないとき for _, arg := range flag.Args() { o.arg = arg } ```

このアンダースコアは公式にはブランク識別子(blank identifier)というらしいが、懐かしのMobaSiFを想起させる(あれから15年...)。

_. はじまりのファイルはビルド対象にならない

むしろ便利。

init なる関数

init使いだすころにはもう暗黙の事柄は常識に変わっているでしょうね。

fmt.Sprint(map)のキーはソートされる

goのmapは基本的にキーがランダマイズされるが、fmt.Sprintにmapを渡したときはキーがソートされる。(go1.12以降)

それではさようならまた会いましょうセガール

サイト内検索