LoginSignup
11
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-03

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

11
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5