golang中如何动态切换hash算法?

我希望能够根据调用者输入在哈希算法之间切换,例如,实现一个函数:

func GenericHash(dat []byte, hash unint) (string, error) { ... }

其中 hash 是由crypto.Hash指定的算法类型。

我不确定如何编写这个函数,特别是 import 语句应该放在哪里。如果我在顶部包含我将在顶部使用的算法的所有导入语句,则 go 会抱怨它们已导入但未使用。反正有按需进口吗?


繁星coding
浏览 260回答 1
1回答

狐的传说

您需要做的是仅为它们的副作用导入包(即在导入包时使用空白标识符)。这意味着导入包的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}
打开App,查看更多内容
随时随地看视频慕课网APP