前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟带你掌握 go mod 导入本地包

3分钟带你掌握 go mod 导入本地包

作者头像
小锟哥哥
发布2022-05-10 09:14:04
12.3K0
发布2022-05-10 09:14:04
举报
文章被收录于专栏:GoLang全栈GoLang全栈

对于一个项目来说,不可能所有代码都自己写。

所以这就涉及到引入别人的代码,得有效避免重复造轮子,在 Go 语言里面,这个操作也叫引包。

Go 语言诞生之后,升级了很多次一直都没有官方的包管理工具。

一直到 1.11 版才出现 go module 这个官方的管理工具。

于是现在的大部分 Go 语言新项目都在使用 go module 来进行包管理。

我们用得非常多的是使用 go module 引入 Github 上的包,直接 go get 就搞定了。

但是如何引入本地的包呢?

一、引入的包在同一项目下

在实际开发中,这是我们最见的场景。

一般情况下我们在项目的目录下面,会建很多的包,他们并不冲突,比如下面结构图中的:instancekun-package

代码语言:javascript
复制
.
├── main.go
├── go.mod
├── instance
│   └── UserInstance.go
└── kun-package
    └── Hello.go

如果你想在 main.go 里面想要使用kun-package 包里面的代码,你只需要初始化 go module 即可,他会自动生成类似以下内容的 go.mod 文件:

代码语言:javascript
复制
module design

go 1.17

这是两个关键信息:

第一行是我们的这个总包的名字。

你可以理解为,我们新建的 go 项目其实也就是一个大包。

然后你会发现我在引入本地的包时,前面的包名就是这个名字:

代码语言:javascript
复制
package main

import (
 kunPackage "design/kun-package"
 "fmt"
)

func main() {
 fmt.Println("hello world")
 kunPackage.SayHello()
}

看到 kun-package 前面的 design 了么?

举一反三,如果你修改了 go.mod 里面的第一行为 github.com/golangstackdev 那你项目里 main.go 文件里面的引入也就得变成 github.com/golangstackdev/kun-package

go.mod 里面第二行是设定我们当前环境的 go 版本,也就是最小版本支持。

二、不在同一项目下面

其实难免我们要引用的包,是别人项目下面的,而不是自己项目下面的。

我们先来看一个项目结构图:

代码语言:javascript
复制
project01
├── go.mod
└── main.go
project02
└── kun-package
    ├── go.mod
    └── hello.go

我们的工程01(project01)下面新建了一个 main.go ;

同时在工程01所在目录,我们还有一个工程02(project02)。

工程01里面需要使用的工程02里面的包。

这个时候,要想完成引用的话:被引用的包和使用的工程都要有各自独立的 go.mod 文件。

project02/kun-package/go.mod 内容非常简单,就是基础的两行:

代码语言:javascript
复制
module kun-package

go 1.17

project01/go.mod 里面就比较复杂了,需要做两步操作:

代码语言:javascript
复制
module project01

go 1.17

require kun-package v0.0.0

replace kun-package => ../project02/kun-package

require 是声明我们引入的包名和版本。

replace 是进行替换对于的包指向路径。

非常容易理解!

然后我们在project01/main.go 文件里面就可以正常的使用了:

代码语言:javascript
复制
package main

import (
 kunPackage "kun-package"
)

func main() {
 kunPackage.SayHello()
}

你学废了么?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、引入的包在同一项目下
  • 二、不在同一项目下面
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档