代碼以及使用方法:https://github.com/lzw730/gofmtAllDirgit
package main import ( "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "path/filepath" "strings" ) //獲取指定目錄及全部子目錄下的全部文件,能夠匹配後綴過濾。 func WalkDir(dirPth string) (dirs []string, err error) { dirs = make([]string, 0, 20) //遍歷目錄 err = filepath.Walk(dirPth, func(dirname string, fi os.FileInfo, err error) error { if !fi.IsDir() { return nil } //將目錄路徑改寫成正確格式 if dirname != "./" { dirname = "./" + strings.Replace(dirname, "\\", "/", -1) } dirs = append(dirs, dirname) return nil }) return dirs, err } //基於windows,執行go fmt命令 func goFmtDirs(path string) { cmd := exec.Command("cmd", "/C", "go fmt", path) stdout, err := cmd.StdoutPipe() //獲取輸出對象,能夠從該對象中讀取輸出結果 if err != nil { log.Fatal(err) } //保證關閉輸出流 defer stdout.Close() //運行命令 if err := cmd.Start(); err != nil { log.Fatal(err) } // 讀取輸出結果 if opBytes, err := ioutil.ReadAll(stdout); err != nil { log.Fatal(err) } else { fmt.Print(string(opBytes)) } } func main() { path := flag.String("path", "./", "The dir path") dirs, err := WalkDir(*path) if err != nil { log.Fatal(err) } for _, v := range dirs { goFmtDirs(string(v)) } }