package main import ( "fmt" "io/ioutil" "os" "os/user" "strconv" ) func main() { if len(os.Args) < 2 { return } u, err := user.Current() if err != nil { fmt.Print("none") return } dir := fmt.Sprintf("%s/.version", u.HomeDir) if err := os.MkdirAll(dir, os.ModePerm); err != nil { fmt.Print("none") return } fname := fmt.Sprintf(`%s/%s`, dir, os.Args[1]) v, err := versionGet(&fname) if err != nil { fmt.Print("none") } versionSet(&fname, v) fmt.Print(v) } func versionGet(fname *string) (v uint64, err error) { f, err := os.OpenFile(*fname, os.O_RDONLY|os.O_CREATE, 0600) if err != nil { return } defer f.Close() b, err := ioutil.ReadAll(f) if err != nil { return } v, _ = strconv.ParseUint(string(b), 10, 64) v++ return } func versionSet(fname *string, v uint64) error { f, err := os.OpenFile(*fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) if err != nil { return err } defer f.Close() buf := strconv.FormatUint(v, 10) if _, err := f.WriteString(buf); err != nil { return err } return nil }