无需解码文件。只需将响应正文复制到您打开的文件中即可。这是修改后的示例中的交易:
response.Body
是数据流,并实现了Reader
接口-意味着您可以按顺序调用Read
它,就好像它是打开的文件一样。- 我在这里打开的文件将实现该
Writer
接口。相反,这是您可以调用的流Write
。 io.Copy
“修补”读取器和写入器,使用读取器流并将其内容写入写入器。
这是我最喜欢的go之一-隐式接口。您不必声明要实现接口,只需实现要在某些情况下使用的接口即可。这允许混合和匹配不需要了解与之交互的其他代码的代码。
包主
import ( "fmt" "io" "log" "net/http" "os")func main() { url := "http://i.imgur.com/m1UIjW1.jpg" // don't worry about errors response, e := http.Get(url) if e != nil { log.Fatal(e) } defer response.Body.Close() //open a file for writing file, err := os.Create("/tmp/asdf.jpg") if err != nil { log.Fatal(err) } defer file.Close() // Use io.Copy to just dump the response body to the file. This supports huge files _, err = io.Copy(file, response.Body) if err != nil { log.Fatal(err) } fmt.Println("Success!")}


