当前位置: 首页 > article >正文

go mod的使用

1. go中包的介绍和定义

        包就是很多golang源码的集合,Go语言为我们提供了很多内置包,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io等。

种类:1、系统内置包        2、自定义包        3、第三方包

  • 系统内置包:Golang 语言给我们提供的内置包,引入后可以直接使用,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io等。
  • 自定义包:开发者自己写的包
  • 属于自定义包的一种,需要下载安装到本地才能使用,比如说decimal包解决float精度丢失问题。

2 go包管理工具 go mod

        在Golang1.11版本之前如果我们要自定义包的话必须把项目放在GOPATH目录。Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,Go1.13以后可以彻底不要GOPATH了。

包(package)是多个Go源码的集合,一个包可以简单理解为一个存放多个.go文件的文件夹。该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。

package math

func sum(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}
  • 一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能在多个文件夹下。
  • 包名可以不和文件夹的名字一样,包名不能包含-符号。
  • 包名为main的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译不包含main包的源代码则不会得到可执行文件。

3.go中init()初始化函数

        在Go 语言程序执行时导入包语句会自动触发包内部init()函数的调用。需要注意的是:init() 函数没有参数也没有返回值。init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。

包的初始化执行顺序:

1.全局声明        2.init()函数        3.main()

多个包的引入顺序

4.go中的第三方包

4.1 方法1:  go get包全名(全局)

go get https://github.com/shopspring/decimal

4.2 方法2:go mod download (全局)

go mod download 

        依赖包会自动下载到 $GOPATH/pkg/mod目录,并且多个项目可以共享缓存的mod,注意使用go mod download的时候,需要首先在你的项目中引入第三方包

4.3  方法3:go mod vendor 将依赖复制到当前项目的vendor(本项目)

go mod vendor 

5 go mod 常见指令

go download:下载依赖的module到本地cache
go edit:编辑go.mod文件
go graph:打印模块依赖图
go init:在当前文件夹下初始化一个新的module,创建go.mod文件
tidy:增加丢失的module,去掉未使用的module
vendor:将依赖复制到vendor下
verify:校验依赖,检查下载的第三方库有没有本地修改,如果有修改,则会返回非0,否则校验成功

6. 安装第三方包

去官方网站Go Packages - Go PackagesGo is an open source programming language that makes it easy to build simple, reliable, and efficient software.icon-default.png?t=O83Ahttps://pkg.go.dev/

搜索我们想用的包,比如搜索一个有关json操作的包,我们进去后,找到它的GitHub - tidwall/gjson: Get JSON values quickly - JSON parser for Go,然后提供了完整的教程

go get -u github.com/tidwall/gjson

 下载这个依赖


http://www.kler.cn/news/368007.html

相关文章:

  • 网络搜索引擎Shodan(4)
  • 中小型门诊管理系统源码,云诊所管理系统源码,前端技术栈:Vue 2 , Vite , Vue Router 3
  • Java进阶篇设计模式之二 ----- 工厂模式
  • Rust 力扣 - 1. 两数相加
  • Kafka消费者故障,出现活锁问题如何解决?
  • 强大!Spring Boot 3.3 集成 PDFBox 轻松实现电子签章功能!
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-24
  • k8s 部署 emqx
  • NVR监测软件/设备EasyNVR多个NVR同时管理构建智慧城市的大数据解决方案
  • YAML格式校验API:免费工具的使用指南
  • 隨筆 20241023 Kafka 事务
  • C语言的三种链接方式
  • 人工智能的未来:从当下走向未知
  • 代码随想录算法训练营第十天|232用栈实现队列、225用队列实现栈、20有效的括号、1047删除字符串中的所有相邻重复项
  • 部署前后端分离若依项目--CentOS7宝塔版
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (八):API说明(暂时完结,后续考虑将在线版mongoDB变为本地版)
  • 多线程——Thread 类的基本用法
  • 安灯系统助力汽车零部件工厂快速解决生产异常
  • python 深度学习 项目调试 图像分割 detectron2
  • 32位的ARMlinux的4字节变量原子访问问题
  • sv标准研读第十九章-功能覆盖率
  • konva不透明度,查找,显示,隐藏
  • ThreadPoolExecutor可以创建哪是哪三种线程池呢?
  • linux网络编程4——WebSocket协议及服务器的简易实现
  • 苏州金龙技术创新赋能旅游新质生产力
  • Navicat导入Excel数据时数据被截断问题分析与解决方案