この記事は Go4 Advent Calendar 2018 の3日目です。
2日目は、@Maki-Daisuke さんの 「その昔作った解凍コマンド Kaito と、その実装のご紹介」 でした。
小ネタです。
io.Reader/Writer
の接続図をコメントに残す
同僚が以下のようなコメントをコードに書いていて1、分かりやすいなと思ったので真似しようと思った、という話です。そういえばなにかのライブラリでも見たような気がするので、私が知らないだけで普通のことなのかもしれません。
// multipart.Writer ->- io.Pipe -)- http.Request
// |<CreateFormFile>
// os.File -)- io.Copy ->- writer
書き方
ルールは伝わればなんでもよいのですが、こんな感じにしていました。
-
io.Reader
:入力は)- xxx
、出力はxxx -)
と表す(例:)- bufio.Reader -)
)。 -
io.Writer
:入力は>- xxx
、出力はxxx ->
と表す(例:>- bufio.Writer ->
)。
例
標準パッケージから適当に選んでみた例になります。
package os
os.File -)
>- os.File
package io
)- io.Copy ->
)- io.CopyN ->
>- io.Pipe -)
)- io.LimitedReader -)
>- io.MultiWriter ->
\->
)- io.TeeReader -)
\->
)- io.MultiReader -)
)-/
package io/ioutil
)- ioutil.ReadAll
>- ioutil.Discard
package bufio
)- bufio.Reader -)
>- bufio.Writer ->
package bytes
bytes.Reader -)
>- bytes.Buffer -)
package net/http
)- http.Post
http.Response.Body -)
package mime/multipart
multipart.Writer ->
|<CreateFormFile>,<CreateFormField>
>- writer
package archive/zip
zip.Writer ->
|<Create>
>- writer
package compress/gzip
>- gzip.Writer ->
package crypto/cipher
)- cipher.StreamReader -)
-
アイデアの元ネタは、ascii.jpでの渋川よしきさんの記事「Goならわかるシステムプログラミング」とのことでした。 ↩