package util import ( "bufio" "bytes" "fmt" "go/format" "io/ioutil" "os" "path/filepath" "strings" "text/template" "time" "github.com/logrusorgru/aurora" "zero/core/logx" ) func CreateIfNotExist(file string) (*os.File, error) { _, err := os.Stat(file) if !os.IsNotExist(err) { return nil, fmt.Errorf("%s already exist", file) } return os.Create(file) } func RemoveIfExist(filename string) error { if !FileExists(filename) { return nil } return os.Remove(filename) } func RemoveOrQuit(filename string) error { if !FileExists(filename) { return nil } fmt.Printf("%s exists, overwrite it?\nEnter to overwrite or Ctrl-C to cancel...", aurora.BgRed(aurora.Bold(filename))) bufio.NewReader(os.Stdin).ReadBytes('\n') return os.Remove(filename) } func FileExists(file string) bool { _, err := os.Stat(file) return err == nil } func FileNameWithoutExt(file string) string { return strings.TrimSuffix(file, filepath.Ext(file)) } func CreateTemplateAndExecute(filename, text string, arg map[string]interface{}, forceUpdate bool, disableFormatCodeArgs ...bool) error { if FileExists(filename) && !forceUpdate { return nil } var buffer = new(bytes.Buffer) templateName := fmt.Sprintf("%d", time.Now().UnixNano()) t, err := template.New(templateName).Parse(text) if err != nil { return err } err = t.Execute(buffer, arg) if err != nil { return err } var disableFormatCode bool for _, f := range disableFormatCodeArgs { disableFormatCode = f } var bts = buffer.Bytes() s := buffer.String() logx.Info(s) if !disableFormatCode { bts, err = format.Source(buffer.Bytes()) if err != nil { return err } } return ioutil.WriteFile(filename, bts, os.ModePerm) } func FormatCodeAndWrite(filename string, code []byte) error { if FileExists(filename) { return nil } bts, err := format.Source(code) if err != nil { return err } return ioutil.WriteFile(filename, bts, os.ModePerm) }