Go Hashing (Japanese)

"Hashing" from golang wiki

Go公式WikiのHashingの日本語意訳になります。
(元記事の最終更新日: 2016/08/04 rev.4)


ハッシュ化

hash.Hash インターフェース

標準ライブラリで定義されている全てのハッシュは、hash.Hashインタフェースを実装しています。
Hashインターフェースはデータを入力させ、それまでの入力データの合計(ハッシュ)を取得し、その入力データを捨て去ることが可能です。またハッシュ型に基づいた定数を返却するメソッドもあります。

データの入力には、Writeメソッドを使用します。

h.Write(byteSlice)

または以下でも可能です。

io.Copy(h, file)

Writeinterrorを返却しますが、これらは単にio.Writerインターフェースに準拠しているだけです。ハッシュは決してerrorn != len(byteSlice)のintを返却しません。

データ入力のあらゆるタイミングで、Sumメソッドを呼び出し、現在までの合計値を取得することができます。
Sum()メソッドの使用は今後の合計値の呼び出しには影響しません。Sumのもっとも一般的な方法は、sum := h.Sum(nil)です。
Sum()メソッドは合計値を引数の[]byteへ追加し、新たな[]byteを返却します。
これによって、毎回Sumを使うたびに新しい[]byteを割り当てずに済ますことができます。
もしも頻繁にSumを行う場合は、md5sum := make([]byte, 16)を1回だけ実行し、新たなハッシュ値が必要な際には毎回h.Sum(md5sum[:0])をすると良いでしょう。

既に作成済みのハッシュオブジェクトを再利用したい場合は、Reset()を使い、それまでに入力されたすべてのデータを捨て去ることができます。

参考: Package hash

 
comments powered by Disqus