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

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

前言:

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

Go语言中为我们提供了很多内置包,如 fmtosiostrconvstrings

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 提供了 modulerequirereplace 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