2 回答

TA貢獻1824條經驗 獲得超8個贊
例如,
var data, nonce, previousHash []byte
unixtime := strconv.FormatInt(time.Now().Unix(), 10)
hasher := sha1.New()
hasher.Write(data)
hasher.Write(nonce)
hasher.Write([]byte(unixtime))
hasher.Write(previousHash)
hash := hasher.Sum(nil)
或者,
var data, nonce, previousHash []byte
unixtime := strconv.FormatInt(time.Now().Unix(), 10)
soup := make([]byte, 0, len(data)+len(nonce)+len(unixtime)+len(previousHash))
soup = append(soup, data...)
soup = append(soup, nonce...)
soup = append(soup, unixtime...)
soup = append(soup, previousHash...)
hasher := sha1.New()
hasher.Write(soup)
hash := hasher.Sum(nil)
筆記:
unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)
是荒謬的。它始終是 Unicode 替換字符。例如,
package main
import (
"fmt"
"time"
"unicode"
)
func main() {
unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)
fmt.Println(unixtimeStr == string(unicode.ReplacementChar))
}
輸出:
true
要將整數轉換為字符串,請使用strconv包。例如,
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
unixtimeStr := strconv.FormatInt(time.Now().Unix(), 10)
fmt.Println(unixtimeStr)
}
輸出:
1257894000

TA貢獻1856條經驗 獲得超11個贊
我應該指出這hash.Hash
是一個io.Writer
所以你可以將它作為第一個參數傳遞給fmt.Fprintf(...)
-- 并且,由于字節切片的動詞fmt
是正確的%s
,你可以通過以下方式使其更具可讀性:
h?:=?sha1.New() fmt.Fprintf(h,?"%s%s%d%s",?data,?nonce,?time.Now().Unix(),?prev)
...并且,它也為您處理整數轉換(使用%d
)
注意:fmt.Fprintf(...)
不是很快;如果性能很重要,你應該找到另一種方法來做到這一點。性能和可讀性通常是一個微妙的平衡。
- 2 回答
- 0 關注
- 170 瀏覽
添加回答
舉報