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