ついにGo
の勉強をちゃんとするときが来た!ということで、2周目読み終わった。とても良かった
英語版を読んだけど読んでる途中で日本語版も出てた。今ならこっちを買うかな
良かったところ
僕にとってちょうど良い
JavaやPHPなど何か別の言語を知ってる人向けで、すごく基本的なことはスキップしてGoの特徴を中心に説明してくれてるので、本当に僕が知りたいことがちょうど良い濃さで書いてあってちょうど良かった
This book is targeted at developers who are looking to pick up a second (or fifth) language. The focus is on people who are new to Go.
流れがとても理解しやすい
Primitiveから始まって、ArrayとSliceやって、コントロールストラクチャー、関数、ポインター、メソッド・インターフェース、エラー、モジュール、goroutineと、前から順番に理解できるようになってるし、どの章も「へー!」ってなって楽しい
一通り触れられている
httpやjsonなどの基本的なパッケージや、テストなど「仕事で使うなら最低限これくらいは知っておきたいな」ってことに一通り触れられているのも良い。なので、だいたいのことは「使い始めるときには調べることができる」という状態になったと思う
仕組みを教えてくれる
説明も良くて、Arrayがどういう風にメモリを確保するのか、SliceがArrayをどう使って領域を拡張していくのか、「だからこのタイミングで違う領域を指すようになるんだよ」とか、そのへんを丁寧に、難しすぎずに、ちょうどよい深さで説明してくれるので「なるほどなー」ってなってとても良い
使うとき・使わないときを教えてくれる
「こういうことができる」という機能の説明だけじゃなくて「こういうことができるけど、これはあまり使わない方が良い」「この場合はこういう使い方をすると良い」ということを説明してくれているので、なるほどなぁと思いながら読んだ
1周目読んだあとに、Effective Go を読んで「ほうほう」ってなって、もう一回戻ってきて2周目を読んだのだけど、この流れはとても良かったと思う
Jon が拾ってくれる
Learning Goについてつぶやいてたら著者のJonが拾ってくれた。とても優しい
I’m sorry that it’s not working for you. Anything in particular?
— Jon Bodner (@jonbodner) September 28, 2022
この後、分かんなかったところを伝えたら、丁寧に全部教えてくれて理解が進んだ。とても感謝
難しかったところ
これは本が難しかったのではなくて、僕がJavaの頭から切り替えるのが難しかったところ
HandlerFunc
Handler
インターフェースを実装するのに
type Handler interface { ServeHTTP(http.ResponseWriter, *http.Request) }
こういうタイプを定義すると
type HandlerFunc func(http.ResponseWriter, *http.Request) func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) { f(w, r) }
関数がインターフェースを満たすようになるっての、まだ、ゆっくり順番に落ち着いて考えないといけない!
Accept Interfaces, Return Structs
特にこれがJava脳に引っ張られてしまってたやつだけど「実装がインターフェースを知らなくて良い」ということが理屈としては分かっていても「だから使う側でインターフェースを定義するんだよ」というのを理解するのに時間がかかった
1周目では「んー?」ってなってて、2周目で「やっぱピンとこないなぁ」って何度か読み直して、コードを眺めて、ハッと気付いた。「そういうことかー!」って。面白い。あとは実際に使ってみて慣れてこ
エラーのWrapping
%w
でエラーのWrappingができるのは「え?文字列になってるのにどうやって取り出してるの?」ってなって、結局コードを読んだら、%w
が入ってたら文字列を埋め込むのと同時にStructに保存してた。意外な実装だった!
fmt.Errorf の %w って文字列化してるだけじゃなさそうだけど、どう扱ってるんだろう?と思ったら、wrapErrorってstructになってた。そっかぁ
— Mitz Shiiba (@bufferings) October 7, 2022
次
あたらしめの機能に目を通す
Genericsについても書かれてはいるんだけど、実際にどういう風に使われ始めてるのかとかまでは書かれてないので、わりとあたらしめの機能周りはさらっと目を通しておこうかなぁと思う
コードを読み書きしていこー!
ということで、とりあえず調べながらでもGoのコードを読むことはできそう。書くのはまだまだつまづきながらだと思うけど、Golandも手伝ってくれるだろうし大丈夫かな。入門はできたー!自分にとって新しい言語を学ぶのは、とても楽しい。次はコードを読み書きしていこー!おー(๑•̀ㅂ•́)و✧
とても良い本でした!
Learning Go とても良い本でした!