首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >go mod依赖管理

go mod依赖管理

作者头像
程序猿川子
发布2025-07-03 11:53:15
发布2025-07-03 11:53:15
7800
代码可运行
举报
运行总次数:0
代码可运行

1. 管理并使用自己的包

1.1 情景假设

假设项目目录如下:

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 project
     |__go.mod
     |__src
         |__main.go
         |__utils
             |__query.go

go.mod文件如下:

代码语言:javascript
代码运行次数:0
运行
复制
bash 体验AI代码助手 代码解读复制代码 mudule test
 ​
 go 1.17

main.go文件如下:

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package main
 ​
 import(
     "fmt"
 )
 ​
 ​
 func main(){
     ...
 }

query.go文件如下:

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package utils   
 ​
 func Query(){
     ...
 }

1.2 导入utils包中的Query函数

1.2.1 确保go.mod文件存在

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

代码语言:javascript
代码运行次数:0
运行
复制
bash 体验AI代码助手 代码解读复制代码 go mod init test
1.2.2 确保被导入的函数名大写

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

1.2.3 如何import包

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

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 import(
     "fmt"
     "test/src/utils"
 )

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

1.2.4 如何使用函数

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package main
 ​
 import(
     "fmt"
     "test/src/utils"
 )
 ​
 func main() {
     utils.Query()
 }
Tips:import取别名

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 import(
     "fmt"
     hello "test/src/utils"
 )
 ​
 func main() {
     hello.Query()   //utils.Query()
 }
1.2.5 运行main函数

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

代码语言:javascript
代码运行次数:0
运行
复制
arduino 体验AI代码助手 代码解读复制代码 go run ./src

2. 如何导入第三方包

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package main
 ​
 import(
     "fmt"
 )
 ​
 func main() {
     ...
     //此处需要sonic.Marshal()
 }

2.1 如何写import

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 import(
     "fmt"
     "github.com/bytedance/sonic"
 )

2.2 如何下载第三方包

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

方法1:go get 地址

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

代码语言:javascript
代码运行次数:0
运行
复制
arduino 体验AI代码助手 代码解读复制代码 go get github.com/bytedance/sonic

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

方法2:go mod tidy

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 go mod tidy

3. 其它补充内容

3.1 init函数

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

注意:

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

3.1.1 情景假设

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 project
     |__go.mod
     |__src
         |__main.go
         |__utils
             |__query.go

main.go

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package main
 ​
 import(
     "fmt"
     "test/src/utils"
 )
 ​
 func main() {
     utils.Query()
 }

query.go

代码语言:javascript
代码运行次数:0
运行
复制
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 结果

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

代码语言:javascript
代码运行次数:0
运行
复制
csharp 体验AI代码助手 代码解读复制代码 go run ./src
 ​
 init utils 1
 init utils 2
 ...

3.2 不引用函数,但保留import

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

方法:下划线别名

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

代码语言:javascript
代码运行次数:0
运行
复制
go 体验AI代码助手 代码解读复制代码 package main
 ​
 import(
     "fmt"
     _ "test/src/utils"
 )
 ​
 func main() {
     ...
 }

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 管理并使用自己的包
    • 1.1 情景假设
    • 1.2 导入utils包中的Query函数
      • 1.2.1 确保go.mod文件存在
      • 1.2.2 确保被导入的函数名大写
      • 1.2.3 如何import包
      • 1.2.4 如何使用函数
      • 1.2.5 运行main函数
  • 2. 如何导入第三方包
    • 2.1 如何写import
    • 2.2 如何下载第三方包
      • 方法1:go get 地址
      • 方法2:go mod tidy
  • 3. 其它补充内容
    • 3.1 init函数
      • 3.1.1 情景假设
      • 3.1.2 结果
    • 3.2 不引用函数,但保留import
      • 方法:下划线别名
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档