最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言下載網(wǎng)絡(luò)圖片或文件的方法示例

 更新時(shí)間:2018年12月23日 16:45:04   作者:Asche  
這篇文章主要介紹了Go語言下載網(wǎng)絡(luò)圖片或文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

最近閑來無事, 于是就簡單學(xué)習(xí)了下Go語言的基本的用法。由于實(shí)踐才是最快的學(xué)習(xí)方法,所以這里就以下載網(wǎng)絡(luò)圖片或文件入手來學(xué)習(xí)Go語言

文件下載到本地,通常的思路就是先獲得網(wǎng)絡(luò)文件的 輸入流 以及本地文件的 輸出流 ,再讀取輸入流到輸出流中,因此自然也要獲取相應(yīng)的 Reader 和 Writer 。

下面首先是使用GoLang的http.Get()方法(使用client的do方法原理類似)

// 圖片以花瓣網(wǎng)的圖片為例
  imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"

  res, err := http.Get(imgUrl)
  if err != nil {
    fmt.Println("A error occurred!")
    return
  }
  // defer后的為延時(shí)操作,通常用來釋放相關(guān)變量
  defer res.Body.Close()

然后獲得get請求響應(yīng)的reader對象

// 獲得get請求響應(yīng)的reader對象
  reader := bufio.NewReaderSize(res.Body, 32 * 1024)

上面獲取到了輸入流的reader對象, 下面來獲取本地文件的輸出流的writer對象

imgPath := "C:\\Users\\Asche\\go\\src\\GoSpiderTest\\"
  // 根據(jù)圖片url獲取其文件名
  fileName := path.Base(imgUrl)


    file, err := os.Create(imgPath + fileName)
  if err != nil {
    panic(err)
  }
  // 獲得文件的writer對象
  writer := bufio.NewWriter(file)

好了, reader和writer對象都得到了,然后在讀取寫入。

如果嫌麻煩的話,可以直接copy:

written, _ := io.Copy(writer, reader)
  // 輸出文件字節(jié)大小
  fmt.Printf("Total length: %d", written)

或則手動(dòng)讀取和寫入

bytes := make([]byte, 32 * 1024)
  for {
    len, err := reader.Read(bytes)

    if len < 0 || err != nil{
      return
    }
    // 注意這里byte數(shù)組后的[0:len],不然可能會(huì)導(dǎo)致寫入多余的數(shù)據(jù)
    _, _ = writer.Write(bytes[0:len])
    fmt.Printf("%d ", len)
  }

ok,下載完成。

下面貼上完整的代碼(讀取寫入采用的方法一)

package main

import (
  "bufio"
  "fmt"
  "io"
  "net/http"
  "os"
  "path"
)

func main() {
  imgPath := "C:\\Users\\Asche\\go\\src\\GoSpiderTest\\"
  imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"

  fileName := path.Base(imgUrl)


  res, err := http.Get(imgUrl)
  if err != nil {
    fmt.Println("A error occurred!")
    return
  }
  defer res.Body.Close()
  // 獲得get請求響應(yīng)的reader對象
  reader := bufio.NewReaderSize(res.Body, 32 * 1024)


  file, err := os.Create(imgPath + fileName)
  if err != nil {
    panic(err)
  }
  // 獲得文件的writer對象
  writer := bufio.NewWriter(file)

  written, _ := io.Copy(writer, reader)
  fmt.Printf("Total length: %d", written)
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 重學(xué)Go語言之文件操作詳解

    重學(xué)Go語言之文件操作詳解

    有很多場景都需要對文件進(jìn)行讀取或者寫入,比如讀取配置文件或者寫入日志文件,在Go語言中,操作文件應(yīng)該算是一件比較簡單的事情,我們在這一篇文章中,一起來探究一下
    2023-08-08
  • Go語言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究

    Go語言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究

    這篇文章主要為大家介紹了Go語言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Gin框架中參數(shù)校驗(yàn)優(yōu)化詳解

    Gin框架中參數(shù)校驗(yàn)優(yōu)化詳解

    這篇文章主要為大家詳細(xì)介紹了Gin框架中參數(shù)校驗(yàn)優(yōu)化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-08-08
  • Go語言入門學(xué)習(xí)之Channel通道詳解

    Go語言入門學(xué)習(xí)之Channel通道詳解

    go routine可以使用channel來進(jìn)行通信,使用通信的手段來共享內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于Go語言入門學(xué)習(xí)之Channel通道的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Go語言文件讀寫操作案例詳解

    Go語言文件讀寫操作案例詳解

    這篇文章主要為大家介紹了Go語言文件讀寫操作案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • golang值類型轉(zhuǎn)換成[]uint8類型的操作

    golang值類型轉(zhuǎn)換成[]uint8類型的操作

    這篇文章主要介紹了golang值類型轉(zhuǎn)換成[]uint8類型的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang語言如何讀取http.Request中body的內(nèi)容

    Golang語言如何讀取http.Request中body的內(nèi)容

    這篇文章主要介紹了Golang語言如何讀取http.Request中body的內(nèi)容問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • go嵌套匿名結(jié)構(gòu)體的初始化詳解

    go嵌套匿名結(jié)構(gòu)體的初始化詳解

    這篇文章主要介紹了go嵌套匿名結(jié)構(gòu)體的初始化詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 解決Go gorm踩過的坑

    解決Go gorm踩過的坑

    這篇文章主要介紹了解決Go gorm踩過的坑,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang函數(shù)這些神操作你知道哪些

    Golang函數(shù)這些神操作你知道哪些

    這篇文章主要為大家介紹了一些Golang中函數(shù)的神操作,不知道你都知道哪些呢?文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-02-02

最新評論

达孜县| 钟祥市| 新竹县| 福州市| 望谟县| 韶山市| 苍南县| 三门县| 西青区| 新蔡县| 张家口市| 扎兰屯市| 三门县| 阿拉善右旗| 嘉义县| 沙河市| 清丰县| 繁峙县| 石河子市| 永川市| 涞源县| 鄂伦春自治旗| 宿迁市| 镇宁| 长汀县| 绥滨县| 新余市| 商都县| 类乌齐县| 呼图壁县| 安阳市| 双辽市| 蓬溪县| 墨脱县| 牙克石市| 嘉定区| 枣阳市| 永修县| 津南区| 八宿县| 松原市|