• golang 通过go get | go mod download下载安装包


    安装完golang后,输入go env可以看到

    GOPATH="/home/zhongzhanhui/go"
    GOROOT="/usr/local/go"
    GOBIN=""
    

    1.go get

    参考http://c.biancheng.net/view/123.html

    go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。

    默认情况下,go get 可以直接使用。例如,想获取 go 的源码并编译,使用下面的命令行即可:

    go get github.com/davyxu/cellnet
    

    go get下载的依赖包会放到GOPATH 目录下,因此获取前需要确保 GOPATH 已经设置。Go 1.8 版本之后,GOPATH 默认在用户目录的 go 文件夹下。

    总结:

    • GO111MODULE="auto" | "off"
      下载的包会安装在GOPATH/src下,import导入非标准包的时候也会从这个目录搜索。

    • GO111MODULE="on"
      下载的包会安装在GOPATH/pkg/mod/下,import导入非标准包的时候是从这个目录搜索,不会去GOPATH/src目录下找包。

    2.go module

    参考https://www.cnblogs.com/chnmig/p/11806609.html
    
    https://www.jianshu.com/p/bbed916d16ea
    
    https://www.cnblogs.com/klsw/p/11537850.html
    
    这个很详细:goproxy和go modules的初步使用
    

    go module是go官方自带的go依赖管理库。go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等,使用go module之后我们可不需要关心GOPATH,也不用将代码放置在src下了。

    GO111MODULE=off: 不使用 modules 功能。
    GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
    GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能。
    

    推荐使用 Go 模块时将 GO111MODULE 设置为 on而不是atuo,将以下语句添加进 ~/bashrc中,然后重开Terminal

    vim ~/.bashrc
    # 添加 
    export GO111MODULE=on
    

    初始化

    项目第一次使用 GO MODULE(项目中还没有go.mod文件) ,cd进入项目文件夹,初始化 MODULE

    cd /home/zhongzhanhui/GoProject/Seckill   
    go mod init Seckill  	#Seckill是项目名
    

    此时项目根目录会出现一个 go.mod 文件,此时的 go.mod 文件只标识了项目名和go的版本,这是正常的,因为只是初始化了。 go.mod 文件内容如下:

    module SecKill
    
    go 1.13
    

    检测依赖

    go mod tidy
    

    tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件,写入后会发现 go.mod 文件有所变动:

    module SecKill
    
    go 1.13
    
    require (
    	github.com/gin-contrib/sessions v0.0.1
    	github.com/gin-gonic/gin v1.5.0
    	github.com/jinzhu/gorm v1.9.11
    	github.com/kr/pretty v0.1.0 // indirect
    	gopkg.in/yaml.v2 v2.2.2
    )
    

    此时依赖还是没有下载的。

    下载依赖

    我们需要将依赖下载至本地,但不使用 go get,而是使用以下命令

    go mod download
    

    然而如果你没有设置 GOPROXY 为国内镜像,这步百分百会卡死。

    设置镜像的语句(最好把他们写进 ~/.bashrc 中,不然每次打开Terminal都要执行一次):

    export GO111MODULE=on
    export GOPROXY=https://goproxy.io
    

    参考https://blog.csdn.net/mrtwenty/article/details/98451005

    此时会将依赖全部下载至 GOPATH 下的pkg/mod文件夹中,比如此处会下载到/home/zhongzhanhui/go/pkg/mod中,同时会在项目根目录下生成 go.sum 文件, 该文件是依赖的详细依赖。但是我们开头说了,我们的项目是没有放到 GOPATH 下的,那么我们下载至 GOPATH 下是无用的,照样找不到这些包

    似乎项目是可以找到放在GOPATH 下的依赖包的。

    导入依赖

    go mod vendor
    

    执行此命令,会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下,此时我们就可以使用这些依赖了。然而实际不导入也是完全ok的。导入了反而更麻烦。

    在协作中使用 GOMODULE时要注意的是, 在项目管理中,如使用git,请将 vendor 文件夹放入白名单,不然项目中带上包体积会很大。

    git设置白名单方式为在git托管的项目根目录新建 .gitignore 文件

    设置忽略即可。但是 go.mod 和 go.sum 不要忽略,另一人clone项目后在本地进行依赖更新(同上方依赖更新)即可。

    3.GOLAND设置开启 GO MODULE

    这部分看goproxy和go modules的初步使用 更详细。

    可能是因为 GO MODULE 功能还需完善,GOLAND默认是关闭该功能的,我们需要手动打开。proxy应该填https://goproxy.io

    在GoLand的setting中设置好GOPATH,然后在代码的import的依赖包处按 alt+enter ,同步依赖包即可,可以看到依赖包名会由红色变绿色。

    依赖更新

    这里的更新不是指版本的更新,而是指引入新依赖,不使用 go get ,我怎么在项目中加新包呢?

    直接项目中 import 这个包,之后更新依赖即可依赖更新请从检测依赖部分一直执行即可,即

    go mod tidy
    go mod download
    go mod vendor
    

    GOMODULE常用命令

    go mod init  # 初始化go.mod
    go mod tidy  # 更新依赖文件
    go mod download  # 下载依赖文件
    go mod vendor  # 将依赖转移至本地的vendor文件
    go mod edit  # 手动修改依赖文件
    go mod graph  # 打印依赖图
    go mod verify  # 校验依赖
    

    原文链接:https://blog.csdn.net/weixin_41519463/article/details/103501485

  • 相关阅读:
    日记 2018/1/12
    【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
    Python笔试、面试 【必看】
    高性能Go并发
    Go连接MySql数据库Error 1040: Too many connections错误解决
    MAC 配置文件 ~/.zshrc
    go-statsd项目
    日记 2017.11.20
    sed 命令详解
    Opentsdb简介(一)
  • 原文地址:https://www.cnblogs.com/davis12/p/14987615.html
Copyright © 2020-2023  润新知