// utils package main import ( "fmt" "io" "io/ioutil" "os" "os/user" "path" ) type Hfile struct { name string dir string path string handle *os.File } type Tmpfile struct { path string dir string name string handle *os.File } func (f *Hfile) init() { u, err := user.Current() if err != nil { fmt.Println("Panicking!") panic(fmt.Sprintf("%v", err)) } f.dir = u.HomeDir f.path = path.Join(f.dir, f.name) } func (f *Tmpfile) init() { tmpdir, err := ioutil.TempDir(os.TempDir(), f.name) if err != nil { fmt.Println("Panicking!") panic(fmt.Sprintf("%v", err)) } f.dir = tmpdir f.path = path.Join(f.dir, f.name) } func (h *Hfile) Open() { fh, err := os.Open(h.path) if err != nil { fmt.Print(err) } h.handle = fh } func (h *Tmpfile) Open() { fh, err := os.OpenFile(h.path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600) if err != nil { fmt.Print(err) } h.handle = fh } func CopyFile(src, dst string) (int64, error) { sf, err := os.Open(src) if err != nil { return 0, err } defer sf.Close() df, err := os.Create(dst) if err != nil { return 0, err } df.Chmod(0600) defer df.Close() return io.Copy(df, sf) }