GoLang, "hash.Write" , where did the "write()" function come from?

huangapple go评论107阅读模式
英文:

GoLang, "hash.Write" , where did the "write()" function come from?

问题

这段代码的作用是计算字符串的哈希值。在代码中,h 是一个 hash 类型的变量,它使用了 fnv 包中的 New32a() 方法来创建一个新的哈希对象。然后,代码使用 h.Write() 方法将字符串的字节表示写入到哈希对象中。最后,通过调用 h.Sum32() 方法,返回计算得到的哈希值。

关于你提到的 Write() 方法,它是哈希对象的一个方法,用于将数据写入到哈希对象中。在 Go 语言的标准库中,hash 包是一个接口,它定义了哈希对象的通用方法,而具体的哈希算法则由实现了该接口的具体类型来提供。因此,在 hash 包中并没有直接的 Write() 方法,而是由具体的哈希类型来实现该方法。

你可以点击这里查看更多关于 Go 语言中 hash 包的详细信息。

英文:
func hash(s string) uint32 {
	h := fnv.New32a()
	h.Write([]byte(s))
	return h.Sum32()
}

For this code piece. I understand what type is h. It is hash.
But for Hash type, I didn't see any Write() method. http://golang.org/pkg/hash/ what is this Write()?

thanks

答案1

得分: 6

Hash 接口嵌入了 Writer 接口。因此,任何想要实现 Hash 接口的类型,也需要实现包含 Write 方法的 Writer 接口。

Write 方法的原因是你可以计算任何可以被写入的内容的哈希值。例如,你可以计算对象的格式化表示的哈希值(使用 fmt 包),或者你可以计算 JSON 表示的哈希值(使用 json 包),等等。

h := fnv.New32a()
fmt.Fprint(h, myobject)
// 或者:
// json.NewEncoder(h).Encode(myobject)
// 等等
return h.Sum32()
英文:

The Hash interface embeds the Writer interface. Therefore, any type that wants to implement the Hash interface, also needs to implement the Writer interface containing the Write method.

The reason for the Write Method is that you can calculate hashes of anything that can be written. For example, you can calculate the hash of the formatted representation of an object (by using the fmt package), or you can calculate the hash of the json representation (by using the json package), etc.

h := fnv.New32a()
fmt.Fprint(h, myobject)
// alternatively:
// json.NewEncoder(h).Encode(myobject)
// etc.
return h.Sum32()

huangapple
  • 本文由 发表于 2014年5月17日 23:35:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/23713146.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定