package main

import (
	"fmt"
	"hash"
	"hash/fnv"
	"sync"
)

var (
	hashPool = sync.Pool{
		New: func() interface{} {
			return fnv.New32a()
		},
	}
)

func getHash() hash.Hash32 {
	return hashPool.Get().(hash.Hash32)
}

func putHash(h hash.Hash32) {
	hashPool.Put(h)
}

func checksum(data []byte) uint32 {
	hash := getHash()
	defer putHash(hash)
	hash.Reset()
	_, _ = hash.Write(data)
	return hash.Sum32()
}

func main() {
	data := []byte("Hello, World!")
	fmt.Printf("Checksum: %d\n", checksum(data))
}
