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)
}
必要なのは、入力文字列から変換されたハッシュキー文字列です。 h.Sum(nil)を使用してバイト形式で取得し、%x形式でハッシュキーを出力できました。しかし、この関数から%x形式を返し、それを使用して電子メールアドレスをハッシュキーに変換し、それを使用してGravatar.comにアクセスできるようにします。
Goでmd5関数を使用して%x形式のハッシュキーを取得するにはどうすればよいですか?
ありがとう、
私が正しく理解しているなら、あなたは%x形式を返したいです:
16進数をインポートしてEncodeToString
メソッドを使用できます
str := hex.EncodeToString(h.Sum(nil))
または単に値をSprintfします。
func md(str string) string {
h := md5.New()
io.WriteString(h, str)
return fmt.Sprintf("%x", h.Sum(nil))
}
sprintfは、フォーマット文字列を解析し、見つかったタイプに基づいて反映する必要があるため、より遅いことに注意してください。
これにはfmt
パッケージを使用しないでください。 fmt
パッケージはリフレクションを使用し、デバッグ以外には高価です。自分が何を持っているか、何に変換したいかを知っているので、適切な変換パッケージを使用する必要があります。
バイナリから16進数への変換、およびその逆の変換には、 encoding/hex パッケージを使用します。
16進数へstring
:
str := hex.EncodeToString(h.Sum(nil))
Hex string
から:
b, err := hex.DecodeString(str)
[]byte
のエンコード/デコード関数もあります。
10進数から/に変換する必要がある場合は、 strconv パッケージを使用します。
int
からstring
へ:
str := strconv.Itoa(100)
string
からint
へ:
num, err := strconv.Atoi(str)
このパッケージには、他の変換(ベースなど)を行う他の関数がいくつかあります。
したがって、エラーメッセージをデバッグまたはフォーマットしない限り、適切な変換を使用してください。お願いします。