Golang - 6 Golang中包的使用、安装第三方包

发布时间 2023-04-26 19:24:21作者: Duosg

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>