我希望能够根据调用者输入在哈希算法之间切换,例如,实现一个函数:func GenericHash(dat []byte, hash unint) (string, error) { ... }其中 hash 是由crypto.Hash指定的算法类型。我不确定如何编写这个函数,特别是 import 语句应该放在哪里。如果我在顶部包含我将在顶部使用的算法的所有导入语句,则 go 会抱怨它们已导入但未使用。反正有按需进口吗?
1 回答
狐的传说
TA贡献1804条经验 获得超3个赞
您需要做的是仅为它们的副作用导入包(即在导入包时使用空白标识符)。这意味着导入包的init函数将被执行,但您将无法直接访问它们的任何导出成员。
这是您可以解决问题的一种方法:
import (
"errors"
"encoding/hex"
"crypto"
_ "crypto/md5"
_ "crypto/sha1"
// import more hash packages
)
func GenericHash(dat []byte, hash crypto.Hash) (string, error) {
if !hash.Available() {
return "", errors.New("hash unavailable")
}
h := hash.New()
return hex.EncodeToString(h.Sum(dat)), nil
}
- 1 回答
- 0 关注
- 259 浏览
添加回答
举报
0/150
提交
取消