デバッグに慣れていないと学習にも時間がかかるのでprint文を写経でおさらい
プログラミングをする際に、時間がかかってしまうのは使用しているライブラリのことを理解していないよりも、デバグに時間がかかりすぎていることが多々あるので、print文周りを最初のうちにおさらいしておくといいのではないか、ということで真面目にprintしてみます。
特に、Go言語はCのように型に厳格そうで、javascriptのように楽には出力できなさそうですからやっておきましょう。
Printf, Println, Fprintf, Fprintln, Sprintf, SprintlnなどCを書いていないとあまり直感的ではない省略語が出てきますが、fやsの意味をwikipediaで調べておきます。wikipediaではプリントエフと読むようです。私はこれまでプリントフと心の中で読んでいました。
https://ja.wikipedia.org/wiki/Printf
いざ写経
サンプルを見ているとfmtパッケージが出力を担っているようなので、fmtパッケージのドキュメントに書いてあるコード例をなぞっていけば良さそうです。基本的なフォーマットやErrorの出力をして見ましょう。
ちなみにimportに使わないパッケージがあるだけでコンパイルが通らないようです。
Scan
次はScan系です。ドキュメンテーションの写経をしながらstructやnil, int, float32, float64などの型を知ることができました。Go言語が初めての言語の人には厳しいですが、見覚えがありますね。また:=によって宣言と代入を同時に済ませることができているようです。コメントした行を外して見たりして色々と試して見てください。
GoStringer
かっこいい名前が出てきました。型定義をしたものなどの出力をするための関数のようです。pythonでいう__str__のようなもののようです。以下のサンプルの通りです。func (p Person) GoString() stringのブロックやfunc (p Person) String() stringのブロックをコメントすることでprint文の挙動が変わるのがわかると思います。この辺はGo言語を書く上でいちいち実装を頑張らなくてはならないところのようですが、デバグを捗らせるためには楽はできないところです。
以上、デバグする際に必要になるprint文をざっといじってみました。
GoStringよりStringメソッドを実装してfmt.Printlnを使うか、StringもGoStringも実装せずにfmt.Printf("%#v\n", item)を使うのが実際は便利なのかなと思いました。
読むだけだと、ちょっと退屈するかと思いますが、実際に書いてみるとそうではないはずなので、PlayGroundを見たりローカルで実行してコードを変更して見たり、やってみてください。次回はいよいよhttp requestを行います!