学习Go语言基础类语法_Day04包

1、定义

包可以区分命令空间(一个文件夹中不能有两个同名文件),也可以更好的管理项目。go中创建一个包,一般是创建一个文件夹,在该文件夹里面的go文件中,使用package关键字声明包名称,通常,文件夹名称和包名称相同。并且,同一个文件下面只有一个包

2、创建包

  1. 创建一个名为dao的文件夹。

  2. 创建一个dao.go文件。

  3. 在该文件中声明包。

    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

image
进行初始化

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的文件
image
image
可运行main文件
image

声明各包,一个包下的所有文件均为属于这个包
image
image
image
image
然后我们给service包下的文件编写内容
函数、方法开头需要大写才可被其他包使用
image
image

运行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>

这时候添加了依赖
image
生成了即创建了go.sum文件
image
下载依赖

go mod tidy

image

使用包

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

image
image

posted @ 2022-09-24 00:03  Caidd123  阅读(8)  评论(0)    收藏  举报