package main import "fmt" import "os" import "log" import "io" var err error var from, to *os.File const bufSize = 64 * 1024 func copyFile(src io.Reader, dst io.Writer) error { buf := make([]byte, bufSize) for { n, er := src.Read(buf) if er != nil || n == 0 { if er != nil && er != io.EOF { return fmt.Errorf("Read error: %v:", er) } break } _, wer := dst.Write(buf[:n]) if wer != nil { return fmt.Errorf("Write error: %v:", wer) } } return nil } func main() { if len(os.Args) != 3 { log.Fatalln("Usage: go-cp from to") } from, err = os.Open(os.Args[1]) if err != nil { log.Fatalln("Error open", err) } defer from.Close() to, err = os.Create(os.Args[2]) if err != nil { log.Fatalln("Error open", err) } defer to.Close() // err = copyFile(from, to) _, err = io.Copy(from, to) if err != nil { log.Fatalln(err) } }