Go公式WikiのHashingの日本語意訳になります。
(元記事の最終更新日: 2016/08/04 rev.4)
ハッシュ化
hash.Hash インターフェース
標準ライブラリで定義されている全てのハッシュは、hash.Hash
インタフェースを実装しています。
Hashインターフェースはデータを入力させ、それまでの入力データの合計(ハッシュ)を取得し、その入力データを捨て去ることが可能です。またハッシュ型に基づいた定数を返却するメソッドもあります。
データの入力には、Write
メソッドを使用します。
h.Write(byteSlice)
または以下でも可能です。
io.Copy(h, file)
Write
はint
とerror
を返却しますが、これらは単にio.Writer
インターフェースに準拠しているだけです。ハッシュは決してerror
やn != 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()
を使い、それまでに入力されたすべてのデータを捨て去ることができます。
comments powered by Disqus参考: Package hash