http://play.golang.org/p/SKtaPFtnKO
func md(str string) []byte {
h := md5.New()
io.WriteString(h, str)
fmt.Printf("%x", h.Sum(nil))
// base 16, with lower-case letters for a-f
return h.Sum(nil)
}
Tout ce dont j'ai besoin est une chaîne de clé de hachage qui est convertie à partir d'une chaîne d'entrée. J'ai pu l'obtenir au format octets en utilisant h.Sum (nil) et j'ai pu imprimer la clé de hachage au format% x. Mais je veux retourner le format% x à partir de cette fonction afin de pouvoir l'utiliser pour convertir l'adresse e-mail en Hash-key et l'utiliser pour accéder à Gravatar.com.
Comment obtenir la clé de hachage au format% x en utilisant la fonction md5 dans Go?
Merci,
Si j'ai bien compris, vous souhaitez retourner le format% x:
vous pouvez importer de l'hex et utiliser la méthode EncodeToString
str := hex.EncodeToString(h.Sum(nil))
ou simplement Sprintf la valeur:
func md(str string) string {
h := md5.New()
io.WriteString(h, str)
return fmt.Sprintf("%x", h.Sum(nil))
}
notez que Sprintf est plus lent, car il doit analyser la chaîne de format, puis réfléchir en fonction du type trouvé
Vous devez éviter d'utiliser le package fmt
pour cela. Le package fmt
utilise la réflexion, et il est coûteux pour autre chose que le débogage. Vous savez ce que vous avez et ce que vous souhaitez convertir, vous devez donc utiliser le package de conversion approprié.
Pour convertir du binaire en hexadécimal et inversement, utilisez le package encoding/hex .
Vers Hex string
:
str := hex.EncodeToString(h.Sum(nil))
Depuis Hex string
:
b, err := hex.DecodeString(str)
Il existe également des fonctions Encode/Decode pour []byte
.
Lorsque vous devez convertir en/à partir d'une décimale, utilisez le package strconv .
De int
à string
:
str := strconv.Itoa(100)
De string
à int
:
num, err := strconv.Atoi(str)
Il y a plusieurs autres fonctions dans ce paquet qui font d'autres conversions (base, etc.).
Donc, sauf si vous déboguez ou formatez un message d'erreur, utilisez les conversions appropriées . S'il vous plaît.