Go项目基础: GOROOT、GOPATH、Go-Modules

Golang — GOROOT、GOPATH、Go-Modules-三者的关系介绍

初学者没有搞明白的GOROOT,GOPATH,GOBIN,project目录

GOROOT & GOPATH

安装完golang1.13后,有两个路径GOROOT和GOPATH。

使用命令 go env 查看这两个路径:

GOROOT="/usr/local/go"
GOPATH="/Users/bytedance/go"

GOROOT下放的是golang本身的代码,当import一些golang自带的库,比如net/http时,程序会优先去GOROOT下寻找对应的库。

如果我们 import “github.com/gin-gonic/gin” ,程序到GOROOT路径下找不到这个库,就会去GOPATH路径下的src目录下找这个库。也就是说,GOPATH路径是专门用于存放第三方库(包括我们自己写的代码库)的。

GOPATH目录(可以理解为工作目录)如下:

go    // go为GOPATH目录
  -- bin
     -- myApp1  // 编译生成
     -- myApp2  // 编译生成
     -- myApp3  // 编译生成
  -- pkg
  -- src
     -- myApp1     // project1
        -- models
        -- controllers
        -- others
        -- main.go 
     -- myApp2     // project2
        -- models
        -- controllers
        -- others
        -- main.go 
     -- myApp3     // project3
        -- models
        -- controllers
        -- others
        -- main.go 

当前我的GOPATH目录下是这样的

在这里插入图片描述

可见,我的cost_crawl项目里import的一些第三方库也同样被安装在src目录下(比如github.com目录下有许多从github下载的库,像gin之类的)

GOPATH的缺点

从上面可以看到,第三方库和自己写的项目都放在GOPATH的src目录下,而且需要使用go get命令来逐个下载第三方库(go get命令自动把第三方库下载到GOPATH/src目录)。

官方在go1.11后推出go modules的功能,有了go modules功能后,建议使用go modules的方法,项目目录也不需要再放到GOPATH/src目录下了。

首先要设定环境变量GO111MODULE,它有三个取值:

  • auto:go判断当前目录是否满足以下两种情况,都满足的话就会开启modules功能
    1. 该项目目录不在GOPATH/src下
    2. 当前目录or上一层目录存在go.mod文件
  • on:启用modules功能。
  • off:不启用modules功能。

modules功能使用方法

在项目目录下运行命令 go mod init ,然后就会生成一个go.mod文件,文件里module默认使用项目目录名。此外还包含了go的版本、用到的第三方库等信息行。

此后可以用命令 go mod download 下载第三方库,也可以直接运行go build或者go install,也会自动安装第三方库。此时第三方库不再被安装在GOPATH/src下,而是下载到GOPATH/pkg/mod中

在这里插入图片描述

go run、go build、go install

go run

go run执行过程中,首先将程序编译成可执行文件,然后运行可执行文件,而且这个可执行文件在运行完毕后就会自动删除。go run一般用于测试。

go build

go build就是把程序编译成可执行文件,GOPATH目录下有一个bin文件夹专门用于存放go build出来可执行文件。但是似乎需要自己指定输出目录,比如:go build -o bin/main.exe src/webDemo/main.go

go install

go install执行时做了两件事情:

  • 将非main套件编译成 .a 文件,放在pkg目录下
  • 将main套件编译成可执行文件

好处在于,第二次编译时只需要编译main套件,可以复用之前编译好的 .a 文件(使用里面的函数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值