赞
踩
【参考文章】
> 详解GOROOT和GOPATH
- 查看go的安装路径
- goland查看 GOPATH 和 GOROOT,在preference设置中
go env
package main
import "fmt"
func main() {
var numbers = make([]int, 3, 5)
printSlice(numbers)
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
go官方的库所在位置就是在GOROOT里面,比如,fmt;而GOPATH就是专门存放第三方套件以供我们程式码的需要。通常开发Golang的话,通常会在重新设定GOPATH的位置
bin
pkg
src
Golang语言的惯例(强制),GOPATH是指src路径的上一层,我们要在GOPATH路径下主动新增src资料夹,所谓src就是代表source code的意思,也就是放我们开发Golang程式码的相关专案的原始码。
【参考文章】
> GOPATH 使用总结
go install 和 go 工具会用到 GOPATH;作为编译后二进制的存放目的地 和 import 包时的搜索路径。GOPATH 是一个路径列表,也就是可以同时指定多个目录。多个目录在 Mac 和 Linux 下通过:分割。举例:
export GOROOT=/usr/local/go
export GOPATH=/Users/jianbao/GoglandProjects/beego-api-admin:/Users/jianbao/GoglandProjects/go-study
export PATH=$GOROOT/bin:${GOPATH//://bin:}/bin:$PHP/bin:$PHP/sbin:/usr/local/nginx/sbin:/usr/local/mysql:/usr/local/Cellar/subversion/1.9.4/bin:$PATH
# 注意:亮点是 ${GOPATH//://bin:}/bin, 可一次性添加 所有的 GOPATH 的 bin 目录
Go所依赖的所有的第三方库都放在GOPATH这个目录下面,并且,代码开发必须在go path src目录下
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.Run()
}
import了一个github.com/gin-gonic/gin套件,这个是别人开发的Web Framework套件,是不存在于官方程式库的,而是放在GitHub上的第三方套件。
当执行Golang程式码,当需要存取套件时:
Go所依赖的所有的第三方库都放在GOPATH这个目录下面,下载的依赖包也没有版本概念,这就导致了同一个库只能保存一个版本的代码。如果不同的项目,无法依赖同一个第三方的库的不同版本。第三方套件只要不是官方程式库,都需要放置在GOPATH/src的路径下才可以使用
最常用在当我们想用别人公开在GitHub上的套件,可以帮我们从网路上clone到GOPATH/src里面。虽然这样很方便,但是你会发现GOPATH/src下的程式码会很复杂,除了有你自己开发的专案资料夹,也包含其他第三方程式库的专案资料夹。
再来,如果你开发的专案采用第三方套件是不同版本怎么办?以往的解决方法是要设定多组不同的GOPATH。
Go.mod是Golang1.11 版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题
Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。
Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要其中包含有go.mod文件。
参考文章:
Golang | GOROOT、GOPATH、Go-Modules-三者的关系介绍
参考文章:
go mod的介绍以及其存在的优势
GOPATH模式
来查找。一点也不会去GOPATH目录下
查找。当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg
go.mod 文件内提供了module、 require、replace、exclude四个关键字。
# 关键字
module语句指定包的名字(路径)
require语句指定的依赖项模块
replace语句可以替换依赖项模块
exclude语句可以忽略依赖项模块
# 常用命令
go mod download //下载依赖包
go mode edit edit go.mod from tools or scripts 编辑go.mod
go mod graph //打印模块依赖图
go mod init initialize new module in current directory 在当前目录初始化mod
go mod tidy //拉取缺少的模块,移除不用的模块。
go mod vendor //将依赖复制到vendor下
go mod verify verify dependencies have expected content 验证依赖是否正确
go mod why //解释为什么需要依赖
采用Go Modules,下载下来的第三方套件都在,GOPATH/pkg/mod资料夹里面
参考文章:
知乎go mod使用
go env 查看环境变量
go help mod 查看使用文档
常用命令
# 开启 MODULE
go env -w GO111MODULE=on
# 开启 MODULE
go env -w GO111MODULE=off
# 开启 MODULE
go env -w GO111MODULE=auto
# 这是带俩默认值为https://proxy.golang.org,direct
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
# 设置bin
go env -w GOBIN=/Users/youdi/go/bin
go get ./…
下载安装所有依赖包,并更新 go.mod 和 go.sum 文件。go mod edit --require=…/…@v版本号
命令【参考文章】
> go 项目的目录结构 及 安装技巧
bin 存放编译后的可执行文件;
pkg 存放编译后的包文件;
src 存放项目源文件。
一般,bin 和 pkg 目录可以不创建,go 命令会自动创建(如 go install),只需要创建src目录即可。
go get github.com/gin-gonic/gin@v1.5.0
Go项目的环境变量GOROOT和GOPATH的设置-那些踩过的坑
【参考文章】
> 如何安装 第三方 Go 离线包? (GOPATH、 go install)
mkdir src
# 复制 code.google.com.p.go.net.tar.gz 到 src 目录下,解压缩,
cp code.google.com.p.go.net.tar.gz src && tar -zxvf code.google.com.p.go.net.tar.gz
cd ./src
go install code.google.com/p/go.net/websocket
# 这时候目录下会生成一个 pkg 目录,里面有编译好的 .a 文件,就可以在 go 文件里使用这个包了。
参考文章:
详解GOROOT和GOPATH
show.go文件
package kaka
import "fmt"
func Show(){
fmt.Println("第三方类库")
}
使用文件
package main
import "kaka"
func main(){
kaka.Show()
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。