go path ,go vendor,go mode 模式区别和发展

发布时间 2023-04-03 22:34:26作者: yangphp

前言:

包是多个 Go 源码的集合,是一种高级的代码复用方案。

Go语言中为我们提供了很多内置包,如 fmt、os、io,strconv,strings 等

Go 语言的入口 main() 函数所在的包(package)叫 main。

main 包想要引用别的代码,必须同样以包的方式进行引用。

 

go path 模式,

go vendor模式

go mod 模式

 

正文:

包的类型包括三种

系统内置包: fmt ,strings..

自定义包:开发者自己写的包

第三方包:其他开发者写的包,并开源大家使用

 

GOPATH:

GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。

 

Go语言所依赖的所有的第三方库都放在 GOPATH 这个目录下面,

这就导致了同一个库只能保存一个版本的代码

 

查看GOPATH目录:

go env

 

Go Path代码组织形式:

bin:存放编译后生成的二进制可执行文件
pkg:存放编译后生成的文件
src:存放项目的源代码,可以是你自己写的代码,也可以是你 go get 下载的包
将你的包或者别人的包全部放在 $GOPATH/src 目录下进行管理的方式,我们称之为 GOPATH 模式。

 

go vendor 模式的过渡

为了解决 GOPATH 方案下不同项目下无法使用多个版本库的问题,

Go v1.5 开始支持 vendor 。

 

Go Mod 模式

go module 是Go语言从 1.11 版本之后官方推出的版本管理工具,

并且从 Go1.13 版本开始,go module 成为了Go语言默认的依赖管理工具。

不需要配置 GOPATH 代码可以放到任意目录

1.16 默认开启GO111MODULE  官方推荐使用

 

 

自定义包 package:

开发者自己写的包。

go语言通过首字母的大小写来控制访问权限。

无论是方法,变量,常量或是自定义的变量类型,结构体中的字段名,

如果首字母大写,则可以被外部包访问,反之则不可以。

 

Go Mod 开启:

 

打开Go Mod 方式如下:

1.16 默认开启GO111MODULE  官方推荐使用

Windows 下开启 GO111MODULE 的命令为:

set GO111MODULE=on 或者 set GO111MODULE=auto

MacOS 或者 Linux 下开启 GO111MODULE 的命令为:

export GO111MODULE=on 或者 export GO111MODULE=auto

 

 

go mod 相关命令:

go.mod 提供了 module、require、replace 和 exclude 四个命令:

module 语句指定包的名字(路径);

require 语句指定的依赖项模块;

replace 语句可以替换依赖项模块;

exclude 语句可以忽略依赖项模块。

 

go mod命令

 

go mod vendor 生成vendor,并将依赖的包放到vendor目录下

go get  package_name //获取相关依赖

go mod tidy //增加缺少的包,删除无用的包

 

 

 

引入包方式:

import “fmt” //引入单独的包

import (  //引入多个包

"fmt"

"learn/pay"

)

 

第三方包的使用:

第三方包仓库

https://pkg.go.dev/   

 

由于国内下载包的速度很慢,需要先设置国内代理   

设置环境变量 GOPROXY

 

Windows 下设置 GOPROXY 的命令为:

  go env -w GOPROXY=https://goproxy.cn,direct

MacOS 或 Linux 下设置 GOPROXY 的命令为:

 export GOPROXY=https://goproxy.cn

 

使用第三方包:需要使用以下命令

go get package_name