go mod依赖管理

简介: 本文介绍了Go语言中如何管理并使用自己的包以及导入第三方包的方法。内容涵盖包的目录结构、go.mod文件的初始化、import的正确使用方式、init函数的作用及执行顺序,以及如何下载和管理第三方库。通过具体示例演示了包的导入、别名设置、函数调用和运行方式,帮助开发者更好地理解和掌握Go模块化编程的核心技巧。

1. 管理并使用自己的包

1.1 情景假设

假设项目目录如下:

go

体验AI代码助手

代码解读

复制代码

 project
     |__go.mod
     |__src
         |__main.go
         |__utils
             |__query.go

go.mod文件如下:

bash

体验AI代码助手

代码解读

复制代码

 mudule test
 
 go 1.17

main.go文件如下:

go

体验AI代码助手

代码解读

复制代码

 package main
 
 import(
     "fmt"
 )
 
 
 func main(){
     ...
 }

query.go文件如下:

go

体验AI代码助手

代码解读

复制代码

 package utils   
 
 func Query(){
     ...
 }

1.2 导入utils包中的Query函数

1.2.1 确保go.mod文件存在

导入包的时候,首先保证你的项目拥有go.mod文件,同时保证你的go.mod文件已被初始化,若没有,请用:go mod init 模块名的命令来创建go.mod文件。

bash

体验AI代码助手

代码解读

复制代码

 go mod init test

1.2.2 确保被导入的函数名大写

导入包并想使用函数或者变量时,确保你的函数或变量的首字母大写,使其成为导出变量或函数。

1.2.3 如何import包

import的时候,从项目模块名开始,一级一级目录往下写。(也就是包的路径

例如utils目录下的文件,你应该导入的是test/src/utils,即

go

体验AI代码助手

代码解读

复制代码

 import(
     "fmt"
     "test/src/utils"
 )

注意:导入的最后一级是文件夹名,不是包名。若文件夹名改成hello,则import的也应该是test/src/hello

1.2.4 如何使用函数

使用函数应该用包名.函数名的方式使用,具体如下:

go

体验AI代码助手

代码解读

复制代码

 package main
 
 import(
     "fmt"
     "test/src/utils"
 )
 
 func main() {
     utils.Query()
 }
Tips:import取别名

你可以给import的包路径取别名,此时你后续使用就能用别名.函数名的方式调用。例如:

go

体验AI代码助手

代码解读

复制代码

 import(
     "fmt"
     hello "test/src/utils"
 )
 
 func main() {
     hello.Query()   //utils.Query()
 }

1.2.5 运行main函数

运行main函数时,使用go run main函数地址的方式。无需指定到go文件,只需指定到所在目录即可。

arduino

体验AI代码助手

代码解读

复制代码

 go run ./src

2. 如何导入第三方包

假设需要导入字节跳动的json序列化库:github.com/bytedance/s…

go

体验AI代码助手

代码解读

复制代码

 package main
 
 import(
     "fmt"
 )
 
 func main() {
     ...
     //此处需要sonic.Marshal()
 }

2.1 如何写import

从网址里的github.com开始,将后续的内容复制,写道import里:

go

体验AI代码助手

代码解读

复制代码

 import(
     "fmt"
     "github.com/bytedance/sonic"
 )

2.2 如何下载第三方包

import仅仅是将代码写好了,接下来还需要将该第三方包下载到本地使用。

方法1:go get 地址

方法是在命令行使用go get 地址的方式下载:

arduino

体验AI代码助手

代码解读

复制代码

 go get github.com/bytedance/sonic

此时,你的go mod里会生成require部分的内容,同时还会多出一个go.sum文件。(这些都不用关心,是自动完成的)

方法2:go mod tidy

也可以直接使用go mod tidy命令,无需写入地址,结果与上面一致。

go

体验AI代码助手

代码解读

复制代码

 go mod tidy

3. 其它补充内容

3.1 init函数

每一个包下,都可以放置一个特殊的函数:init函数。init函数是导入一个包时自动执行的代码,不需要显式调用。(在main函数执行前完成的)

注意:

  1. init函数没有参数和返回值。
  2. init函数在一个包里可以存在多个。
  3. init函数调用顺序是:按照import的顺序执行,同一包里按照上下的顺序执行。

3.1.1 情景假设

例如还是一开始的目录结构。

go

体验AI代码助手

代码解读

复制代码

 project
     |__go.mod
     |__src
         |__main.go
         |__utils
             |__query.go

main.go

go

体验AI代码助手

代码解读

复制代码

 package main
 
 import(
     "fmt"
     "test/src/utils"
 )
 
 func main() {
     utils.Query()
 }

query.go

go

体验AI代码助手

代码解读

复制代码

 package utils   
 
 import "fmt"
 
 func Query(){
     ...
 }
 
 func init() {
     fmt.Println("init utils 1")
 }
 
 func init() {
     fmt.Println("init utils 2")
 }

3.1.2 结果

下面是命令以及执行结果:

csharp

体验AI代码助手

代码解读

复制代码

 go run ./src
 
 init utils 1
 init utils 2
 ...

3.2 不引用函数,但保留import

这种情况用于:为了调用该包中的init函数,但是不需要引用包里的其它函数的情况。

方法:下划线别名

只需要在import这个包的时候,在前面用下划线_作为别名即可。

go

体验AI代码助手

代码解读

复制代码

 package main
 
 import(
     "fmt"
     _ "test/src/utils"
 )
 
 func main() {
     ...
 }

在这种情况下,init函数依旧会执行,同时也不会报错:没有引用包中的函数。


转载来源:https://juejin.cn/post/7259742949994528827

相关文章
|
9月前
|
供应链 安全 Go
Go Modules 详解 -《Go语言实战指南》
Go Modules 是 Go 语言官方推出的依赖管理工具,自 Go 1.11 起引入,Go 1.16 成为默认方式。它解决了第三方依赖版本控制、项目脱离 GOPATH 限制及多模块管理等问题。本文全面讲解了 Go Modules 的基本原理、初始化方法、常用命令(如 `go mod init`、`go get` 等)、依赖管理(添加/升级/删除)、子模块开发以及常见问题排查,帮助开发者高效使用 Go Modules 进行项目管理。
|
2月前
|
存储 人工智能 自然语言处理
Claude-Mem:给 AI 编程助手装上"长期记忆"
Claude-Mem 是专为 Claude Code 打造的持久化记忆插件,通过钩子捕获操作、AI 压缩摘要、混合检索(SQLite+Chroma),实现跨会话记忆保持、自然语言查询与 Token 节省,让 AI 真正成为长期协作伙伴。(239字)
|
10月前
|
JSON Go C语言
Go语言之定义结构体(Struct)-《Go语言实战指南》
Go 语言中的结构体(`struct`)是一种复合数据类型,可将多个不同类型的字段组合成一个类型。本文介绍了结构体的基本定义、实例创建方式、字段访问与修改、零值特性、比较规则、嵌套使用及标签功能。通过示例代码详细讲解了如何定义和操作结构体,以及其在 JSON 编码等场景的应用。
|
人工智能 自然语言处理 Go
[langchaingo] 智谱GLM-4在线模型体验
本文介绍如何使用Go语言版的Langchain框架——langchaingo,结合清华大学KEG实验室开发的GLM-4模型,在本地运行AI项目。GLM-4是一个先进的自然语言处理模型,支持多种任务。通过智谱AI开放平台注册可获1000w token用于测试。文章展示了langchaingo的基本配置、构建聊天内容及生成回复的过程,并简要总结了项目的现状和未来更新计划。
887 14
|
10月前
|
Go
Go语言接口的定义与实现
Go 语言的接口提供了一种灵活的多态机制,支持隐式实现和抽象编程。本文介绍了接口的基本定义、实现方式、空接口的使用、类型断言以及接口组合等核心概念,并探讨了接口与 nil 的关系及应用场景。通过示例代码详细说明了如何利用接口提升代码的可扩展性和可测试性,总结了接口的关键特性及其在依赖注入、规范定义和多态调用中的重要作用。
384 14
|
8月前
|
人工智能 安全 Go
go快速上手:golang中的反射
本文深入解析Go语言反射机制,涵盖reflect包的核心类型与操作方法,通过实例演示如何动态获取类型信息、修改值及调用方法,并探讨反射的高级用法与注意事项,帮助开发者合理高效地使用反射。
379 1
|
存储 缓存 监控
go 语言实现依赖注入
go 语言实现依赖注入
|
11月前
|
网络协议 前端开发 数据可视化
Apipost免费版、企业版和私有化部署详解
Apipost 是企业级 API 研发协作一体化平台,提供 API 研发、测试、管理全链路解决方案。支持多种协议(HTTP(s)、WebSocket、gRPC 等),助力团队实时协作、降本增效。免费版适合小微团队,具备 API 设计、调试、自动化测试和文档功能;企业版强化全链路资产管理与管控,支持复杂场景测试。此外,私有化部署方案保障数据安全,提供定制化服务与专业支持,满足内网需求企业的要求。
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
2574 14
|
Go
Golang语言之包依赖管理
这篇文章详细介绍了Go语言的包依赖管理工具,包括godep和go module的使用,以及如何在项目中使用go module进行依赖管理,还探讨了如何导入本地包和第三方库下载的软件包存放位置。
428 4

热门文章

最新文章