Go言語を触ってみたのでメモ
普段はフロントエンドを開発している筆者が Go 言語を触ってみたので気になったところとか残します。
インストール
インストールは brew で一発。
チュートリアル
チュートリアルにはこれが良さそう。公式が出してるものの日本語版らしい。
以下、やってみて気になったところのメモ。
:=
はどういう意味があるんだ・・?
Short variable declarations というものらしい。
uint
型? complex64
型?
uint
は非負の整数を表す型らしい。
complex64
は複素数を表す型らしい。
If with a short statement
if
文において条件式の前にも式を記述できる。
より簡潔に、そして変数のスコープを狭めて可読性を上げるための記法なのかなという印象。
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}
return lim
}
Defer
defer
へ渡した関数の実行を、呼び出し元の関数の終わり(return
する)まで遅延させるものです。
defer
へ渡した関数の引数は、すぐに評価されますが、その関数自体は呼び出し元の関数がreturn
するまで実行されません。
どういうケースで使うんだろうと思って調べてみたところ、これがわかりやすかった。
条件分岐などがあってもリソースの開放処理を忘れないように、先に開放処理を書くことができる。
ポインタ
ポインタを介することでミュータブルに変数を扱えるようになると理解した。(通常はイミュータブル)
メモリを効率良く使いたいようなケースで使うのが良さそうだけど、基本的には可読性下がるので使うべきではなさそう。
interface{}
TypeScript におけるany
と同じものっぽい。
goroutine
関数実行時に go
と付けるだけで並列実行してくれるっぽい。
go hogeFunc(foo, bar)
値をやり取りするためのチャネル <-
という仕組みや、排他制御のための sync.Mutex
という仕組みもある。
Go といえば goroutine の名前をよく聞くことがあったけど、これはたしかに便利そう。
panic
いわゆるランタイムエラー(実行時例外)のことっぽい。
Appendix
Discussion