shared/util.go
func FileCopy(source string, dest string) error {
	s, err := os.Open(source)
	if err != nil {
		return err
	}
	defer s.Close()

	fi, err := s.Stat()
	if err != nil {
		return err
	}

	d, err := os.Create(dest)
	if err != nil {
		if os.IsExist(err) {
			d, err = os.OpenFile(dest, os.O_WRONLY, fi.Mode())
			if err != nil {
				return err
			}
		} else {
			return err
		}
	}
	defer d.Close()

	_, err = io.Copy(d, s)
	if err != nil {
		return err
	}

	/* chown not supported on windows */
	if runtime.GOOS != "windows" {
		_, uid, gid := GetOwnerMode(fi)
		return d.Chown(uid, gid)
	}

	return nil
}
func FileCopy(source string, dest string) error {
	s, err := os.Open(source)
	if err != nil {
		return err
	}
	defer s.Close()

	fi, err := s.Stat()
	if err != nil {
		return err
	}

	d, err := os.Create(dest)
	if err != nil {
		if os.IsExist(err) {
			d, err = os.OpenFile(dest, os.O_WRONLY, fi.Mode())
			if err != nil {
				return err
			}
		} else {
			return err
		}
	}
	defer d.Close()

	_, err = io.Copy(d, s)
	if err != nil {
		return err
	}

	/* chown not supported on windows */
	if runtime.GOOS != "windows" {
		_, uid, gid := GetOwnerMode(fi)
		return d.Chown(uid, gid)
	}

	return nil
}
func FileCopy ( source string , dest string ) error { s , err := os . Open ( source ) if err != nil { return err } defer s . Close ( ) fi , err := s . Stat ( ) if err != nil { return err } d , err := os . Create ( dest ) if err != nil { if os . IsExist ( err ) { d , err = os . OpenFile ( dest , os . O_WRONLY , fi . Mode ( ) ) if err != nil { return err } } else { return err } } defer d . Close ( ) _ , err = io . Copy ( d , s ) if err != nil { return err } /* chown not supported on windows */ if runtime . GOOS != " " { _ , uid , gid := GetOwnerMode ( fi ) return d . Chown ( uid , gid ) } return nil }
// FileCopy copies a file, overwriting the target if it exists.
FileCopy copies a file overwriting the target if it exists .