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

相关文章
|
6天前
|
运维 监控 NoSQL
网站部署无忧之旅:Websoft9 多应用托管全程贴心护航
一站式云应用部署解决方案,集成域名管理、服务器搭建、应用安装与运维监控功能。支持阿里云、腾讯云等主流云服务商,实现域名自动解析与HTTPS加密,提供300+应用镜像,一键部署服务器环境。通过智能资源调度与容器化技术,提升性能并降低成本,支持多应用协同运行。可视化运维中台实时监控组件状态,自动推送安全更新,全面提升部署效率与系统稳定性。
|
9天前
|
监控 前端开发 JavaScript
HarmonyOSNext 崩溃急救指南:全局监听+同步退出 = 优雅保命!
本文介绍了HarmonyOS Next中Ark Ts的错误管理技巧,通过全局监听和同步退出机制实现应用崩溃保护。涵盖单线程、Promise及主线程卡死监控方案,并提供实战代码与避坑指南,帮助开发者优雅处理异常,保障用户体验。
119 65
|
9天前
|
存储 运维 JavaScript
《HarmonyOSNext应用崩溃自救指南:零数据丢失的故障恢复黑科技》
本文详解HarmonyOS Next应用崩溃时如何实现零数据丢失的故障恢复机制,涵盖API差异、核心接口与实战代码,助开发者提升App稳定性和用户体验。
119 65
|
17天前
|
人工智能 前端开发 搜索推荐
《网页滚动的“隐形指挥官”:overscroll - behavior属性全解析》
`overscroll-behavior` 属性是现代网页设计中的关键元素,可精细控制滚动行为,优化用户体验。它包含 `auto`、`contain` 和 `none` 三个核心值,分别实现默认滚动、限制事件传播和完全禁用边界行为的功能。通过解决多层滚动干扰、移动端弹性效果等问题,该属性提升了交互流畅性与沉浸感,同时减少性能开销。在复杂页面中,合理运用此属性能让滚动操作更加智能、独立,为用户带来高效且愉悦的体验,成为打造高品质网页不可或缺的工具。
66 31
|
24天前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
101 34
|
17天前
|
安全 druid Nacos
0 代码改造实现应用运行时数据库密码无损轮转
本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
119 14
|
24天前
|
前端开发 JavaScript Java
Java 学习路线规划及项目案例中的技术栈应用解析
内容包括:**Java 17核心特性**(如sealed class、record)与模块化开发;Spring Boot 3 + Spring Cloud微服务架构,涉及响应式编程(WebFlux)、多数据库持久化(JPA、R2DBC、MongoDB);云原生技术**如Docker、Kubernetes及CI/CD流程;性能优化(GraalVM Native Image、JVM调优);以及前后端分离开发(Vue 3、Spring Boot集成)。通过全栈电商平台项目实战,掌握从后端服务(用户、商品、订单)到前端应用(Vue 3、React Native)的全流程开发。
58 9
|
24天前
|
消息中间件 Java 微服务
2025 版 Java 学习路线实战指南从入门到精通
《Java学习路线实战指南(2025版)》是一份全面的Java开发学习手册,涵盖基础环境搭建、核心语法与新特性、数据结构与算法、微服务架构、云原生技术栈、AI融合及项目实战。内容包括JDK安装配置、IntelliJ IDEA设置、Records类与模式匹配增强、LeetCode题解、Spring Cloud微服务开发、Kubernetes部署、OpenAI API调用等。结合在线商城系统案例,采用Vue 3、Spring Boot 3.5、MySQL、Elasticsearch等技术,提供从理论到实践的完整路径,助力开发者掌握2025年最新趋势与最佳实践。
125 4
|
1天前
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
128 62
|
17天前
|
前端开发 算法 vr&ar
《从碎片到完美:CSS构建响应式拼图游戏布局全攻略》
响应式拼图游戏布局是技术与艺术的结合,通过CSS实现自适应设计,让拼图在不同设备上流畅呈现。它不仅关注视觉美感,更注重用户体验与情感连接。开发者需应对性能优化、浏览器兼容性等挑战,同时融入创新技术如AI、VR,为用户打造沉浸式拼图体验。这是一场关于空间逻辑、交互设计与美学表达的精密创作。
72 31