おわりに
というわけで、GoでI/Oに関わるものを片っ端から書き連ねました。
完全にごった煮状態の本ですがいかがでしたでしょうか。
I/Oは、根本を理解しようとすると低レイヤの知識まで必要になってくるのでなかなか難しいですが、この本が皆さんの理解の一助になっていれば幸いです。
コメントによる編集リクエスト・情報提供は大歓迎ですので、どしどし書き込んでいってください。
連絡先: 作者Twitter @saki_engineer
参考文献
書籍 Linux System Programming
オライリーの本です。
Linuxでの低レイヤ・カーネル内部まわりの話がこれでもかというほど書かれています。
今回この本を執筆するにあたって、1~4章のI/Oの章を大いに参考にしました。
書籍 Software Design 2021年1月号
この本のGo特集第2章が、tenntennさん(@tenntenn)が執筆されたio
章です。
このZenn本ではio.Reader
とio.Writer
しか取り上げませんでしたが、Software Designの記事の方には他のio
便利インターフェースについても言及があります。
Web連載 Goならわかるシステムプログラミング
渋川よしきさん(@shibu_jp)が書かれたWeb連載です。
Goの視点からみた低レイヤの話がとても詳しく書かれています。
以下の回を大いに参考にしました。
- 第2回 低レベルアクセスへの入り口(1):io.Writer
- 第3回 低レベルアクセスへの入り口(2):io.Reader前編
- 第4回 低レベルアクセスへの入り口(3):io.Reader後編
- 第5回 Goから見たシステムコール
- 第6回 GoでたたくTCPソケット(前編)
- 第7回 GoでたたくTCPソケット(後編)
Qiita記事 Go言語を使ったTCPクライアントの作り方
Go Advent Calender 2020 10日目にTsuji Daishiro(@d_tutuz)さんが書かれた記事です。
TCPネットワークにおけるシステムコールは、この本ではsocket()しか取り上げませんでしたが、この記事ではさらに詳しいところまで掘り下げています。
GopherCon 2019: Dave Cheney - Two Go Programs, Three Different Profiling Techniques
動画
サマリー記事Dave Cheneyさん(@davecheney)によるGoCon2019のセッション(英語)です。
前半部分が「ユーザースペースでバッファリングしたI/Oは早いぞ」という内容です。
セッション中に実際にコードを書いて、それを分析ツールでどこが遅いのかを確かめながらコードを改善していく様子がよくわかります。
記事 How to read and write with Golang bufio
bufio.Writer
を使った際の内部バッファの挙動がイラスト付きでわかりやすく書かれています。