golang 使用go从URL下载资源。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 使用go从URL下载资源。相关的知识,希望对你有一定的参考价值。

package main

import (
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
)

func downloadFromUrl(url string) {
    tokens := strings.Split(url, "/")
    fileName := tokens[len(tokens)-1]
    fmt.Println("Downloading", url, "to", fileName)

    // TODO: check file existence first with io.IsExist
    output, err := os.Create(fileName)
    if err != nil {
        fmt.Println("Error while creating", fileName, "-", err)
        return
    }
    defer output.Close()

    response, err := http.Get(url)
    if err != nil {
        fmt.Println("Error while downloading", url, "-", err)
        return
    }
    defer response.Body.Close()

    n, err := io.Copy(output, response.Body)
    if err != nil {
        fmt.Println("Error while downloading", url, "-", err)
        return
    }

    fmt.Println(n, "bytes downloaded.")
}

func main() {

    argc := len(os.Args)
    if argc < 2 {
        fmt.Printf("usage: %s url [urls]\n", os.Args[0])
        os.Exit(1)
    }
    
    for i := 1; i < argc; i++ {
        downloadFromUrl(os.Args[i])
    }  
}

解决go get下载包失败问题

由于某些不可抗力的原因,国内使用go get命令安装包时会经常会出现timeout的问题。本文介绍几个常用的解决办法。

从github克隆

golang在github上建立了一个镜像库,如https://github.com/golang/net就对应是 https://golang.org/x/net的镜像库。 要下载golang.org/x/net包,可以在本地创建包的目录后使用git clone来拉取相应包的源代码文件,具体操作如下:

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/net.git

使用gopm

使用gopm可以从golang.org的一些镜像网站上下载。

安装gopm

go get -u github.com/gpmgo/gopm

使用gopm安装第三方包

不加-g参数,会把依赖包下载.vendor目录下面; 加上-g参数,可以把依赖包下载到GOPATH目录中。

gopm get -g golang.org/x/net

使用gomodule代理goproxy

Go的1.11版本以后 可以设置GOPROXY这个变量,来设置代理。 如果你自己有代理服务器就可以把这个环境变量设置成自己的代理。

首先开启go module支持:

Mac/linux下执行:

export GO111MODULE=on

Windows平台执行:

SET GO111MODULE=on

2019.6.10更新:goproxy.cn

我们这里以https://goproxy.cn为例:

Mac/linux下可以执行以下命令来设置:

export GOPROXY=https://goproxy.cn

Windows平台在cmd执行以下命令来设置:

SET GOPROXY="https://goproxy.cn"

或者在PowerShell中执行:

C:> $env:GOPROXY = "https://goproxy.cn"

以上是关于golang 使用go从URL下载资源。的主要内容,如果未能解决你的问题,请参考以下文章

golang go get代理设置

解决go get下载包失败问题

go get下载包失败问题

golang 终端go命令使用

从源码安装golang

使用 Go lang 从网页中提取链接