「Goならわかるシステムプログラミング」第2章メモ
隣の席のパイセンに借りたこれが積読になってたので読んでいってる
- 作者: 渋川よしき
- 出版社/メーカー: Lambda Note
- 発売日: 2017/10/19
- メディア: テキスト
- この商品を含むブログを見る
ダラダラ読んでも分からないので、だいたい3行ずつくらいでまとめた
最後に問題がついているのでそれもやってみる(まだ途中)
とりあえずまとめ
2.1 io.WriterはOSが持つファイルのシステムコールの相似形
- OSのシステムコールはファイルディスクリプタに対して呼んでいる
- POSIX系OSでは可能な限り様々なものが「ファイル」として抽象化されている
- io.WriterはGo言語のインターフェイスをいう仕組みとして実装されている
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のパッケージのドキュメントをローカルで見ることができる
- インターフェイスを満たしている構造体などを一覧で見ることができる