我希望能夠根據調用者輸入在哈希算法之間切換,例如,實現一個函數: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 關注
- 294 瀏覽
添加回答
舉報
0/150
提交
取消