Go
golang
Go4Day 3

ストリームの流れを図でコメントに残す

この記事は 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 -)

  1. アイデアの元ネタは、ascii.jpでの渋川よしきさんの記事「Goならわかるシステムプログラミング」とのことでした。