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