【Go】(二)Go基础 -- 包和模块

包和模块

一、概念

  • 一个存储库(repository) 包含一个或多个模块(module)
  • 模块是一起发布的相关Go包(package) 的集合
  • 项目中的 依赖(Dependency),就是对其他模块的依赖(在go.mod中定义了模块的路径)

1.1.Package

pacakge的特点:

  • Pacakge是同一目录中一起编译的源文件的集合
  • 在一个源文件中定义的函数,类型,变量和常量对于同一包中的所有其他源文件可见
  • 代码的package和所在的目录名称可以不一致
  • 同一目录的Go代码的package要保持一致

1.2.Main Package

  • 一个go程序以main包中的main函数为入口
  • main包必须有main函数
  • main函数无参无返回值

1.3.Package init方法

  • 在main被执行前,所有依赖的package的init方法都会被执行
  • 不同包的init函数按照包导入的依赖关系决定执行顺序
  • 每个包可以有多个init函数
  • 包的源文件也可以有多个init函数

1.4.go程序执行顺序

按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程

  1. 如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次(因此init方法只会执行一次)
  2. 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数
  3. 在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序

在加载的时候,会自动梳理好依赖顺序(包括变量、导入的包)

var a = b +c
var b = f(c)
var c = 1

func f(x int) int{
	return x + 1
}
// 先初始化c,然后函数f,然后b,然后a

二、go mod

2.1.go mod基本操作


# 初始化
go mod init demo

# 拉依赖
go mod tidy

2.2.go mod vendor

执行该命令后,会在本地生成一个vendor目录,可以把其他要修改的源码放在这个目录下自行维护

Refs

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值