5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

この記事は 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ならわかるシステムプログラミング」とのことでした。 

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
5
Help us understand the problem. What are the problem?