在 Go 中,包是一种组织代码的方式,可以将相关的代码放在同一个包中,方便管理和复用。每个 Go 文件都必须属于一个包,而且包名必须与文件名或者目录名相同。通常情况下,包名应该采用小写字母,例如 fmt、net、http 等标准库中的包名。如果包名由多个单词组成,可以使用下划线分隔,例如 my_math、my_database 等自定义包中的包名。
变量和函数名的可见性
在一个包中,可以定义变量、常量、函数、类型和方法等。其中,变量和函数名的首字母大小写决定了它们的可见性,即是否可以被其他包引用。如果一个变量或者函数名的首字母是大写字母,那么它可以被其他包引用;如果首字母是小写字母,那么它只能在当前包内使用。
在一个 Go 程序中,可以使用 import 语句引入其他包,例如:
import "fmt"
上面的代码引入了 Go 标准库中的 fmt 包,可以使用 fmt 包中的函数和类型。
fmt.Println("test")
import 原理
当你在一个 Go 文件中使用 import 语句导入一个包时,Go 编译器会在 GOPATH 和 GOROOT 环境变量指定的路径中查找该包。如果找到了该包,编译器会将该包的代码编译成对象文件,并将其链接到你的程序中。
当你在项目中使用 import 语句导入一个包时,Go 编译器会按照以下顺序查找该包:
- 当前目录下的 vendor 目录。
- GOPATH 环境变量指定的路径下的 src 目录。
- GOROOT 环境变量指定的路径下的 src 目录。
如果在当前目录下的 vendor 目录中找到了该包,Go 编译器会直接使用该包,而不会去 GOPATH 或 GOROOT 中查找。这意味着,你可以将项目所依赖的第三方包放在 vendor 目录中,而不必担心与其他项目的依赖冲突。
需要注意的是,vendor 目录只对当前项目有效。如果你的项目是一个库,其他项目使用该库时,它们不会使用你的 vendor 目录中的依赖包。因此,如果你的项目是一个库,你应该将依赖包添加到你的 go.mod 文件中,以确保其他项目可以正确地使用你的库。
如何使用第三方库或者自己编写的包
使用第三方库时,需要先使用 go get 下载并安装库
go get github.com/gin-gonic/gin
上面的命令下载并安装了 gin 框架,可以在代码中使用 import “github.com/gin-gonic/gin” 引入该框架。
编写自己的包
创建一个名为 mymath 的文件夹,并在该文件夹下创建一个名为 add.go 的文件,并且 Add 函数可以被其他的包调用
package mymath
func Add(a, b int) int {
return a + b
}
Go Modules
Go Modules 是 Go 1.11 及以上版本中引入的一种依赖管理工具,它可以帮助开发者更加方便地管理项目依赖关系。
在使用 Go Modules 时,你可以在任何目录下创建 Go 项目,并使用 go mod 命令来管理依赖关系。Go Modules 会自动下载依赖包,并将它们存储在项目根目录下的 go.mod 和 go.sum 文件中。
使用 Go Modules 的好处包括:
- 不需要设置 GOPATH 环境变量,可以在任何目录下创建 Go 项目。
- 可以使用语义化版本控制,确保依赖包的版本兼容性。
- 可以使用私有仓库或者本地文件系统作为依赖源。
- 可以使用 go mod tidy 命令自动清理不需要的依赖包。
要使用 Go Modules,你需要按照以下步骤操作:
一、在项目根目录下执行以下命令,初始化 Go Modules
go mod init <module-name>
其中,<module-name> 是你的项目名称
二、在项目中使用第三方包时,可以使用 go get 命令下载依赖包
go get <package-name>
三、在项目中使用已经下载的依赖包时,可以使用 import 语句导入包
import "github.com/gin-gonic/gin"
四、在项目中使用 go mod tidy 命令可以自动清理不需要的依赖包
go mod tidy
示例:
以下演示导入同项目下的包和不同项目的包
目录结构如下:
同项目下 import “项目名称/包名”,包的目录名称和包名保持一致即可,目录下的文件可以自定义
不同项目下 import “项目名称/包名”,
在 go.mod 下增加
require package_test_proj2/mypkg2 v0.0.0
replace package_test_proj2/mypkg2 => ../package_test_proj2
====
import package_test_proj2/mypkg2
代码:
https://github.com/zhengjianhong001/go_example
GOROOT、GOPATH
GOROOT
是 Go 安装目录的路径。它指向 Go 编译器和标准库所在的位置。通常情况下,GOROOT
是由 Go 安装程序自动设置的,你不需要手动更改它。
主要内容
- Go 编译器:
go
命令行工具。 - 标准库:Go 语言自带的库,如
fmt
、net/http
等。
查看 GOROOT
你可以使用以下命令查看 GOROOT
的值:
go env GOROOT
GOPATH 是你的工作空间目录。它是你存放 Go 源代码、包和可执行文件的地方。GOPATH 可以包含多个路径,但通常只设置一个路径。
主要内容
src:存放源代码。
pkg:存放编译后的包文件。
bin:存放编译后的可执行文件。
设置 GOPATH
你可以通过设置环境变量来配置 GOPATH。例如,在 Unix 系统中,你可以在 ~/.bashrc 或 ~/.zshrc 文件中添加以下行:
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
你可以使用以下命令查看 GOPATH
的值:
go env GOPATH
- GOROOT:指向 Go 安装目录,包含 Go 编译器和标准库。通常由安装程序自动设置。
- GOPATH:指向你的工作空间目录,包含源代码、包和可执行文件。需要手动设置。