| // Copyright 2017 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | package hash_test | 
 |  | 
 | import ( | 
 | 	"bytes" | 
 | 	"crypto/sha256" | 
 | 	"encoding" | 
 | 	"fmt" | 
 | 	"log" | 
 | ) | 
 |  | 
 | func Example_binaryMarshaler() { | 
 | 	const ( | 
 | 		input1 = "The tunneling gopher digs downwards, " | 
 | 		input2 = "unaware of what he will find." | 
 | 	) | 
 |  | 
 | 	first := sha256.New() | 
 | 	first.Write([]byte(input1)) | 
 |  | 
 | 	marshaler, ok := first.(encoding.BinaryMarshaler) | 
 | 	if !ok { | 
 | 		log.Fatal("first does not implement encoding.BinaryMarshaler") | 
 | 	} | 
 | 	state, err := marshaler.MarshalBinary() | 
 | 	if err != nil { | 
 | 		log.Fatal("unable to marshal hash:", err) | 
 | 	} | 
 |  | 
 | 	second := sha256.New() | 
 |  | 
 | 	unmarshaler, ok := second.(encoding.BinaryUnmarshaler) | 
 | 	if !ok { | 
 | 		log.Fatal("second does not implement encoding.BinaryUnmarshaler") | 
 | 	} | 
 | 	if err := unmarshaler.UnmarshalBinary(state); err != nil { | 
 | 		log.Fatal("unable to unmarshal hash:", err) | 
 | 	} | 
 |  | 
 | 	first.Write([]byte(input2)) | 
 | 	second.Write([]byte(input2)) | 
 |  | 
 | 	fmt.Printf("%x\n", first.Sum(nil)) | 
 | 	fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil))) | 
 | 	// Output: | 
 | 	// 57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52 | 
 | 	// true | 
 | } |