Skip to content

Instantly share code, notes, and snippets.

@discordianfish
Created February 25, 2013 08:54
Show Gist options
  • Save discordianfish/5028575 to your computer and use it in GitHub Desktop.
Save discordianfish/5028575 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
)
func main() {
url := os.Args[1]
resp, err := http.Get(url)
if err != nil {
log.Fatalf("download failed: %s: %s", url, err)
}
file, err := os.Create("/tmp/download.out")
if err != nil {
log.Fatalf("failed to create /tmp/download.out: %s", err)
}
done := make(chan bool)
go func() {
bytes, err := io.Copy(file, resp.Body)
if err != nil {
log.Fatalf("writing to file failed: %s", err)
}
log.Printf("finished, wrote %d bytes", bytes)
done <- true
}()
abort := make(chan bool)
go func() {
var cmd string
for {
log.Printf("Press any key + return to abort transfer")
fmt.Scan(&cmd)
log.Printf("got %s\n", cmd)
abort <- true
}
}()
outer:
for {
select {
case <-done:
log.Printf("done\n")
break outer
case <-abort:
log.Printf("abort\n")
break outer
}
}
log.Printf("closing body\n")
resp.Body.Close()
log.Printf("closing input\n")
file.Close()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment