1、计算MD5工具

第一种方式(比较慢):

  1. func main() {
  2. var path string
  3. flag.StringVar(&path, "path", "", path)
  4. flag.Usage = func() {
  5. fmt.Println("usage:md5util --path path")
  6. }
  7. flag.Parse()
  8. //检查
  9. file, err := os.Open(path)
  10. if err != nil {
  11. fmt.Println(err)
  12. return
  13. }
  14. defer file.Close()
  15. hasher := md5.New()
  16. ctx := make([]byte, 1024)
  17. for {
  18. n, err := file.Read(ctx)
  19. if err != nil {
  20. if err != io.EOF {
  21. fmt.Println(err)
  22. }
  23. break
  24. }
  25. hasher.Write(ctx[:n])
  26. }
  27. fmt.Printf("%x\n", hasher.Sum(nil))
  28. }

第二种方式(快):

  1. func main() {
  2. var path string
  3. flag.StringVar(&path, "path", "", path)
  4. flag.Usage = func() {
  5. fmt.Println("usage:md5util --path path")
  6. }
  7. flag.Parse()
  8. readFile, err := ioutil.ReadFile(path)
  9. if err != nil {
  10. fmt.println(err)
  11. return
  12. }
  13. hasher := md5.New()
  14. hasher.Write(readFile)
  15. fmt.Printf("%x\n", hasher.Sum(nil))
  16. }

第三种(采用IO.COPY 快):

  1. func main() {
  2. path:=flag.String("path","","path")
  3. flag.Usage = func() {
  4. fmt.Println("usage:md5util --path path")
  5. }
  6. flag.Parse()
  7. open, err := os.Open(*path)
  8. if err != nil {
  9. return
  10. }
  11. hasher := md5.New()
  12. io.Copy(hasher, open)
  13. fmt.Printf("%X\n", hasher.Sum(nil))
  14. }

2、复制文件

注意事项: 文件的检查 src 没输入 文件路径不存在 目录

dst 没输入 父目录不存在 => 自动创建父目录(创建失败/创建成功),报错 文件存在 目录