Go的新手(我正在研究的第一个简单项目)。
问题:如何从URL获取图像,然后将其保存到计算机中?
这是我到目前为止的内容:
package main import ( "fmt" "net/http" "image" "io/ioutil" ) func main() { url := "http://i.imgur.com/m1UIjW1.jpg" // don't worry about errors response, _ := http.Get(url); defer response.Body.Close() m, _, err := image.Decode(response.Body) error := ioutil.WriteFile("/images/asdf.jpg", m, 0644) }
但是,当我运行此代码时,我得到 cannot use m (type image.Image) as type []byte in function argument
cannot use m (type image.Image) as type []byte in function argument
我假设我必须将image.Image(变量m)转换为未定义的字节数?那是解决这个问题的正确方法吗?
m
无需解码文件。只需将响应正文复制到您打开的文件中即可。这是修改后的示例中的交易:
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!") }