https://www.youtube.com/watch?v=aE4eDTUAE70 を追っていたところ、
ターミナルに出力しているハッシュが上書き更新されてて、どうやって出力してるのか気になった。
これ。
fmt.Printf("\r%x", hash)
ただし Go playground でやってみると再現せず。
StackOverflow で理由を発見。
出力先によって違うみたい。
https://stackoverflow.com/questions/15442292/golang-how-to-have-an-inplace-string-that-updates-at-stdout
ターミナルに出力されるという前提がある場合は \r
でいけるけど、
stdoutはファイルやパイプに渡されたりするので、ターミナルに出力されることを無条件に前提にしてはダメだよ、という注意付き。
ちなみに Go Playground の場合はこう。
https://play.golang.org/p/b1LlRwxPdu
stdoutがターミナルかをチェックするのには、 https://rosettacode.org/wiki/Check_output_device_is_a_terminal#Go の通り terminal.IsTerminal(int(os.Stdout.Fd()))
を使うのが良いらしい。