学习Go语言基础类语法_Day04包
1、定义
包可以区分命令空间(一个文件夹中不能有两个同名文件),也可以更好的管理项目。go中创建一个包,一般是创建一个文件夹,在该文件夹里面的go文件中,使用package关键字声明包名称,通常,文件夹名称和包名称相同。并且,同一个文件下面只有一个包
2、创建包
-
创建一个名为dao的文件夹。
-
创建一个dao.go文件。
-
在该文件中声明包。
package dao import "fmt" func Test1() { fmt.Println("test package") }
3、导入包
要使用某个包下面的变量或者方法,需要导入该包,导入包时,要导入从GOPATH开始的包路径,例如,在service.go中导入dao包
package main
import "dao"
func main() {
dao.Test1()
}
4、包注意事项
- 一个文件夹下只能有一个package
import后面的其实是GOPATH开始的相对目录路径,包括最后一段。但由于一个目录下只能有一个package,所以import一个路径就等于是import了这个路径下的包。- 注意,这里指的是“直接包含”的go文件。如果有子目录,那么子目录的父目录是完全两个包。
- 比如你实现了一个计算器package,名叫
calc,位于calc目录下;但又想给别人一个使用范例,于是在calc下可以建个example子目录(calc/example/),这个子目录里有个example.go(calc/example/example.go)。此时,example.go可以是main包,里面还可以有个main函数。 - 一个package的文件不能在多个文件夹下
- 如果多个文件夹下有重名的package,它们其实是彼此无关的package。
- 如果一个go文件需要同时使用不同目录下的同名package,需要在
import这些目录时为每个目录指定一个package的别名。
5、golang 包管理工具go module
6.1、go module简介
go modules 是 golang 1.11 新加的特性,用来管理模块中包的依赖关系。
6.2、go mod 使用方法
- 初始化模块
go mod init <项目模块名称> - 依赖关系处理 ,根据go.mod文件
go mod tidy - 将依赖包复制到项目下的 vendor目录。
go mod vendor如果包被屏蔽(墙),可以使用这个命令,随后使用go build -mod=vendor编译 - 显示依赖关系
go list -m all - 显示详细依赖关系
go list -m -json all - 下载依赖
go mod download [path@version][path@version]是非必写的
6.3、实例演示
首先我们先打开GO111MODULE
set GO111MODULE=on

进行初始化
D:\GO\src\github.com\tmp2>go mod init github.com/tmp2
go: creating new go.mod: module github.com/tmp2
go: to add module requirements and sums:
go mod tidy
这时就生成了一个名为go.mod的文件


可运行main文件

声明各包,一个包下的所有文件均为属于这个包




然后我们给service包下的文件编写内容
函数、方法开头需要大写才可被其他包使用


运行go build 进行缓存,
D:\GO\src\github.com\tmp2>cd service
D:\GO\src\github.com\tmp2\service>go build
D:\GO\src\github.com\tmp2\service>
即可使用service包里的模块
D:\GO\src\github.com\tmp2>go run main.go
hello word
test user TesUserService......
test user TestCustomerservice......
D:\GO\src\github.com\tmp2>
还可以调用远程包
D:\GO\src\github.com\tmp2>go get -u github.com/gin-gonic/gin
go get: added github.com/gin-contrib/sse v0.1.0
go get: added github.com/gin-gonic/gin v1.8.1
go get: added github.com/go-playground/locales v0.14.0
go get: added github.com/go-playground/universal-translator v0.18.0
go get: added github.com/go-playground/validator/v10 v10.11.1
go get: added github.com/goccy/go-json v0.9.11
go get: added github.com/json-iterator/go v1.1.12
go get: added github.com/leodido/go-urn v1.2.1
go get: added github.com/mattn/go-isatty v0.0.16
go get: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go get: added github.com/modern-go/reflect2 v1.0.2
go get: added github.com/pelletier/go-toml/v2 v2.0.5
go get: added github.com/ugorji/go/codec v1.2.7
go get: added golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0
go get: added golang.org/x/net v0.0.0-20220921203646-d300de134e69
go get: added golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8
go get: added golang.org/x/text v0.3.7
go get: added google.golang.org/protobuf v1.28.1
go get: added gopkg.in/yaml.v2 v2.4.0
D:\GO\src\github.com\tmp2>
这时候添加了依赖

生成了即创建了go.sum文件

下载依赖
go mod tidy

使用包
package main
// web-gin包
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
运行结果
D:\GO\src\github.com\tmp2>go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080


浙公网安备 33010602011771号