Golang - 6 Golang中包的使用、安装第三方包
6 包
包:包是在一个文件夹下
,这个文件夹下所有go文件
的第一行要声明包
关键词:import
1 包的使用
① 包内部,首字母小写,不可导出
;大写开头,表示可导出
【函数、变量、结构体】
② 包内部
的变量,只能定义一次
③ 包内部
的东西,在包内部可以直接使用
比如同一个包下,不同go文件中可以直接使用,不用导入
④ 包名可以跟文件夹名不一样,但是一个文件夹下只能有一个包
⑤ 导入包,需要从项目路径开始导入
- 项目结构
day_03
-tools
-s1.go
-s2.go
-go.mod
-s1.go
- 使用别名
// s1.go 中 使用别名来导入 tools包
import aabbc "day_03/tools"
⑥ 包内的init函数,可以使用多次,并在导入包的时候,依次执行
- tools包 - s2.go
package tools
import "fmt"
func init() {
fmt.Println("tools 包下的 s1 下的init 11")
}
func init() {
fmt.Println("tools 包下的 s1 下init 22")
}
func init() {
fmt.Println("tools 包下的 s1 下init 33")
}
- tools包 - s2.go
package tools
import "fmt"
func init() {
fmt.Println("tools 包下的 s2 下的init aa")
}
func init() {
fmt.Println("tools 包下的 s2 下的init bb")
}
- main包下执行 【按照init在包内的位置从上到下依次执行】
tools 包下的 s1 下的init 11
tools 包下的 s1 下init 22
tools 包下的 s1 下init 33
tools 包下的 s2 下的init aa
tools 包下的 s2 下的init bb
⑦ 导入包必须使用,如果只想执行包下的 init函数
,可以使用空白标识符 _
,这样只执行init函数
而不用使用包内的其他东西
import _ "day_03/tools"
tools 包下的 s1 下的init 11
tools 包下的 s1 下init 22
tools 包下的 s1 下init 33
tools 包下的 s2 下的init aa
tools 包下的 s2 下的init bb
go mod
模式从1.11后都是这种模式,项目根路径下会有一个go.mod,包的导入从项目路径下开始导入
go path
模式旧版本的模式,它的包导入,不是从项目路径下开始导入,而是从go path 的src路径下路径下开始导入
2 包的类型
- sdk内置包
- 自定义包
- 第三方包
3 第三方包Gin的使用
① 配置代理:七牛云的代理
-
局部使用
goland中配置当前项目的环境变量: GOPROXY=https://goproxy.cn,direct
-
全局使用
修改全局的环境变量: go env GOPROXY=https://goproxy.cn,direct
② 安装:终端中执行命令安装 gin包
go get github.com/gin-gonic/gin
③ 在main包中,实现路由映射
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 如果要导入 templates文件夹下所有的html页面需要用LoadHTMLGlob方法
r.LoadHTMLGlob("templates/*")
// 如果要 只导入 单个文件,用LoadHTMLFiles方法
r.LoadHTMLFiles("templates/index.html")
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"code": "100",
"message": "成功",
})
})
r.GET("/index", func(c *gin.Context) {
c.HTML(200, "index.html", gin.H{"name": "Scout", "age": 88})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
- index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>姓名:{{.name}} </h2>
<h2>年龄:{{.age}} </h2>
</body>
</html>