哈希表(Hash table,也叫散列表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。具體的介紹網上有很詳細的描述,如閑聊哈希表 ,這里就不再累述了;
myhash.go
- /**
- * Created with IntelliJ IDEA.
- * User: liaojie
- * Date: 12-9-8
- * Time: 下午3:53
- * To change this template use File | Settings | File Templates.
- */
- package main
- import (
- "crypto/md5"
- "crypto/sha1"
- "crypto/sha256"
- "crypto/sha512"
- "flag" //命令行選項解析器
- "fmt"
- "hash"
- "io"
- "os"
- )
- var style = flag.String("s", "sha256", "采用的哈西函數:sha1,sha256")
- var filename = flag.String("f", "", "需要計算散列值的文件名")
- func main() {
- flag.Parse()
- var hs hash.Hash
- switch *style {
- case "md5":
- hs = md5.New()
- case "sha1":
- hs = sha1.New()
- case "sha512":
- hs = sha512.New()
- default:
- hs = sha256.New()
- }
- if len(*filename) == 0 {
- filein, err := os.Open(flag.Args()[len(flag.Args())-1])
- if err != nil {
- return
- } else {
- io.Copy(hs, filein)
- }
- } else {
- filein, err := os.Open(*filename)
- if err != nil {
- return
- } else {
- io.Copy(hs, filein)
- }
- }
- hashString := hs.Sum(nil)
- fmt.Printf("%x/n", hashString)
- }
以上所述就是本文的全部內容了,希望大家能夠喜歡。
新聞熱點
疑難解答