19 Golang包以及go mod

时间:2021-6-7 作者:qvyue
包的介绍和定义

包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为辅我们提供了很多内置包,如fmt/strconv/strings/sort/errors/time/encoding/json/os/io等。

Golang中的包可以分为三种:1. 系统内置包 2. 自定义包 3. 第三方包

系统内置包:Golang语言给我们提供的内置包,引入后可以直接使用,如fmt/strconv/strings/sort/errors/time/encoding/json/os/io等。

自定义包:开发者自己写的包

第三方包:属于自定义包的一种,需要下载安装到本地后才可以使用,如“github.com/shopspring/decimal”包解决float精度丢失问题

包管理工具go mod
  1. 在项目的当前目录里,执行命令:go mod init 项目名 ,会在当前项目目录下自动创建go.mod文件。
  1. 进入当前项目目录,执行命令:go run main.go,此时会自动下载和关联该项目用到的包。
  • 自定义第三方包

进入到go的项目目录下

go mod int demo
  • 新建自定义包文件夹calc及calc.go文件
package calc
var aaa = "私有变量"
var Age = 20

//首字母大写,代表公有方法
func Add(x, y int) int {
    return x + y
}

func Sub(x, y int) int {
    return x - y
}
  • 在main.go中导入
package main 
import (
    "fmt"
    "demo/calc"
)

func main() {
    sum := calc.Add(10, 2)
    fmt.Println(sum) //12
    sub := calc.Sub(10, 2)
    fmt.Println(sub) //8
}
  • 注意事项
  1. 一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能在多个文件夹下
  2. 包名可以不和文件夹的名字一样,包名不能包含-符号
  3. 包名为main的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译不包含main包的源代码则不会得到可执行文件
  4. 一个包中的方法要求不能重复
导入包的方式
  • 单行导入
import "包1"
import "包2"
  • 多行导入
import (
    "包1"
    "包2"
)
导入时自定义包名

通常用于导入的包名太长或者导入的包名冲突的情况

import 别名 "包的路径"
  • 单行引入定义别名
import c "demo/calc"
  • 多行引入定义别名
import (
    "fmt"
    "demo/calc"
    T "demo/tools"
)

func main() {
    T.PrintInfo();
}

如果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包:在包前面加一个下划线

import _ "demo/calc"

匿名导入的包与其他方式导入的包一样,都会被编译到可执行文件中

init()函数

包中init函数的执行时机: 全局声明 > init() > main()

在运行时,Go编译器构建了一个树状的包引用关系,根据引用顺序决定编译顺序,依次编译这些包的代码,被最后导入的包会最先初始化并调用其init()函数

例:在main中importA, A中importB, B中importC,初始化时执行的顺序为C.init() > B.init() > A.init() > main.init()

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。