1、计算MD5工具
第一种方式(比较慢):
func main() {
var path string
flag.StringVar(&path, "path", "", path)
flag.Usage = func() {
fmt.Println("usage:md5util --path path")
}
flag.Parse()
//检查
file, err := os.Open(path)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
hasher := md5.New()
ctx := make([]byte, 1024)
for {
n, err := file.Read(ctx)
if err != nil {
if err != io.EOF {
fmt.Println(err)
}
break
}
hasher.Write(ctx[:n])
}
fmt.Printf("%x\n", hasher.Sum(nil))
}
第二种方式(快):
func main() {
var path string
flag.StringVar(&path, "path", "", path)
flag.Usage = func() {
fmt.Println("usage:md5util --path path")
}
flag.Parse()
readFile, err := ioutil.ReadFile(path)
if err != nil {
fmt.println(err)
return
}
hasher := md5.New()
hasher.Write(readFile)
fmt.Printf("%x\n", hasher.Sum(nil))
}
第三种(采用IO.COPY 快):
func main() {
path:=flag.String("path","","path")
flag.Usage = func() {
fmt.Println("usage:md5util --path path")
}
flag.Parse()
open, err := os.Open(*path)
if err != nil {
return
}
hasher := md5.New()
io.Copy(hasher, open)
fmt.Printf("%X\n", hasher.Sum(nil))
}
2、复制文件
注意事项: 文件的检查 src 没输入 文件路径不存在 目录
dst 没输入 父目录不存在 => 自动创建父目录(创建失败/创建成功),报错 文件存在 目录