寿司は左から食え

個人的なメモ。技術ブログほどでもない。

「Goならわかるシステムプログラミング」第2章メモ

隣の席のパイセンに借りたこれが積読になってたので読んでいってる

Goならわかるシステムプログラミング

Goならわかるシステムプログラミング

ダラダラ読んでも分からないので、だいたい3行ずつくらいでまとめた

最後に問題がついているのでそれもやってみる(まだ途中)

github.com

とりあえずまとめ

2.1 io.WriterはOSが持つファイルのシステムコールの相似形

2.2 Go言語のインターフェイスt

  • Go言語のインターフェイスJavaと同じく、持つべきメソッドを表現するための言語機能
  • インターフェイスを満たす構造体を定義する時に「implements」などのキーワードは必要ない
  • 副作用のあるメソッドではレシーバの型をポインタ型h *Hogeにする

2.3 io.Writerは「インターフェイス

  • syscall.Write()は「osパッケージのFile型に定義されているWrite()というメソッド」
  • 「バイト列bを書き込み、書き込んだバイト数nとエラーerrorを返す」という振る舞いは様々なものに適応できる
  • io.WriterはWrite()メソッドが宣言されているインターフェイス

2.4 io.Writerを使う構造体の例

  • io.Writerインターフェイスを満たす構造体は、ファイルや画面出力、Bufferなど様々なところで実装されている
  • 特にnet.Dial()関数を使ってインターネットにアクセスできるのがGoらしさ
  • io.Writerを受け取り、データを加工して別のio.Writerに書き出す構造体もある(デコレータ)

2.5 インターフェイスの実装状況/利用状況を調べる

  • Goでは構造体がインターフェイスを満たすメソッドを持っているかどうかは、コードを単純に検索するだけでは分からない
  • godocというコマンドを使えばgolang.orgのパッケージのドキュメントをローカルで見ることができる
  • インターフェイスを満たしている構造体などを一覧で見ることができる

2.6 低レベルの機能を組み合わせて入出力APIを作る

  • Goではファイルの読み込みやネットワークアクセスを1行でできるAPIが用意されている
  • それらのAPIもio.Writerやio.Readerのような低レベルの機能が組み合わさり、隠蔽されているだけである
  • 高レベルな関数の実装を知ったり、自分で作れるようになるのが、低レベルを知ることの1つの強み