go项目使用Go module导入本地包示例

Golang使用go mod 导入本地库 Goland使用go mod 导入本地库 主要分为两种情况:一种是在同一个项目下导入,一种是两个不同项目 我的gopath路径在D:gowork 同一个项目导入 这种情况是不需要改动go.mod文件的 文件结构如下,firsttest目录下一个main.go文件,外加当前文件夹下面的InvokeDir文件夹,文件下面有个invoke.go文件,作为测试用的调用函数 1.go.mod文件,注意module名字为firsttest,这个名字就是module名字 main.go文件内容,可以看到直接用mod 阅读详情

      假设我们现在有moduledemo和mypackage两个包,其中moduledemo包中会导入mypackage包并使用它的New方法。

mypackage/mypackage.go内容如下:

package mypackage

import "fmt"

func New(){
    fmt.Println("mypackage.New")
}

现在分两种情况讨论:(1)同一个项目;(2)不同项目;

(1)同一个项目下

注意:在一个项目(project)下我们是可以定义多个包(package)的。

目录结构

现在的情况是,我们在moduledemo/main.go中调用了mypackage这个包。

moduledemo
├── go.mod
├── main.go
└── mypackage
   └── mypackage.go

导入包

这个时候,我们需要在moduledemo/go.mod中按如下定义:

module moduledemo

go 1.15

然后在moduledemo/main.go中按如下方式导入mypackage

package main

import (
    "fmt"
    "moduledemo/mypackage"  // 导入同一项目下的mypackage包
)
func main() {
    mypackage.New()
    fmt.Println("main")
}

举个例子

假设我们现在有文件目录结构如下:

└── bubble
   ├── dao
   │   └── mysql.go
   ├── go.mod
   └── main.go

其中bubble/go.mod内容如下:

package dao

import "fmt"

func New(){
    fmt.Println("mypackage.New")
}

bubble/main.go内容如下:

package main

import (
    "fmt"
    "github.com/q1mi/bubble/dao"
)
func main() {
    dao.New()
    fmt.Println("main")
}

(2)不 同项目下

 目录结构

├── moduledemo
│   ├── go.mod
│   └── main.go
└── mypackage
   ├── go.mod
   └── mypackage.go

导入包

这个时候,mypackage也需要进行module初始化,即拥有一个属于自己的go.mod文件,内容如下:

module mypackage

go 1.14

然后我们在moduledemo/main.go中按如下方式导入:

import (
    "fmt"
    "mypackage"
)
func main() {
    mypackage.New()
    fmt.Println("main")
}

因为这两个包不在同一个项目路径下,你想要导入本地包,并且这些包也没有发布到远程的github或其他代码仓库地址。这个时候我们就需要在go.mod文件中使用replace指令。

在调用方也就是moduledemo/go.mod中按如下方式指定使用相对路径来寻找mypackage这个包。

module moduledemo

go 1.14

require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"

举个例子

现在有文件目录结构如下:

├── p1
│   ├── go.mod
│   └── main.go
└── p2
   ├── go.mod
   └── p2.go

p1/main.go中想要导入p2.go中定义的函数。

p2/go.mod内容如下:

module xiaoliu.com/q1mi/p2

go 1.14

p1/main.go中按如下方式导入

import (
    "fmt"
    "xiaoliu.com/q1mi/p2"
)
func main() {
    p2.New()
    fmt.Println("main")
}

因为没有把xiaoliu.com/q1mi/p2这个包上传到xiaoliu.com这个网站,我们只是想导入本地的包,这个时候就需要用到replace这个指令了。

p1/go.mod内容如下:

module github.com/q1mi/p1

go 1.14

require "xiaoliu.com/q1mi/p2" v0.0.0
replace "xiaoliu.com/q1mi/p2" => "../p2"

此时,我们就可以正常编译p1这个项目了。

golang相关,包括go mod 使用第三方包和自己本地开发的包 一. 环境配置 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct 二. go mod 使用 在系统任意目录下建立gomodtest目录,而不需要把gomodtest放到GOPATH目录下。 1. cmd 到当前gomodtest目录下,运行 go mod init gomodtest 2. 建立main文件,内容如下: package ma... 阅读详情

相关推荐

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash。

cl234583745的博客 1466

golang利用go mod巧妙替换使用本地项目的包

拉了两个项目下来,其中一个项目依赖另一个项目,因为改动了被依赖的项目,想重新导入测试一下。

weixin_60208935的博客 2807

避坑指南:Dify+Docker+Ollama离线部署实战与疑难解析

本文详细解析了在国产化系统(如银河麒麟V10)内网环境中,如何从零开始离线部署Dify、Docker与Ollama的全栈AI应用开发平台。文章重点拆解了Docker安装中的“没有Release文件”和“GPG密钥错误”等典型报错解决方案,并提供了Ollama离线模型导入与Dify连接配置的完整实战指南,旨在帮助开发者高效完成本地部署,避开常见陷阱。

dd012的博客 461

go module 的本地仓库依赖解决方案(Multi-Module Workspaces)多 module 工作区模式 简介

go在1.18新推出的依赖本地。依赖本地未发布的module。设置了工作区后,所有的配置都会以工作区的配置为最高优先级。go.work文件不需要上传到git仓库,本地使用即可。go.work。

DisMisPres的博客 2656

别再瞎调了!手把手教你搞定STM32步进电机PID速度环(附完整代码与比例系数详解)

本文详细解析了STM32步进电机PID速度环的完整实现过程,从算法输出到脉冲频率的转换链路,重点讲解了比例系数的确定方法及系统标定实验。通过完整的代码示例和调试技巧,帮助工程师解决实际应用中的常见问题,提升步进电机控制精度与稳定性。

weixin_28729331的博客 213

基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架

2、有一个提取表达式列,通过编写每个接口的JSON提取表达式,后边在解析Excel时,对接口执行后的响应数据用该表达式提取出来,保存到环境变量,如果某些接口需要前置接口的响应数据,我们就可以从环境变量中获取该数据出来,从而解决了接口关联的问题。1、在之前介绍过全局配置类Contants中添加一个控制台日志开关控制权限,如果选择为false,则控制台不输出日志,将日志输出到allure报表,选择为true,则在控制台输出日志,不输出到allure报表。

专注于技术分享的博主 1183

【Go mod 学习之 replace 篇】解决 go 本地依赖、无法拉取依赖、禁止依赖等问题

需要说明的是,正常情况下不需要使用replace来修改版本,最直接的办法是修改require即可,虽然replace也能够做到,但这不是replace的一般使用场景。blog 是应用的入口,main 所在位置,而 article 可以理解为你写的一个公共的库,其中提供了一个函数 Hello()。如果想在你的模块如果想引入你本地其他地方的模块,可以尝试通过 replace 指定目录,而且前提是你的 article 也得 go 的一个模块,而不是按 gopath 下的某个包来引入。

叮当猫的喵i 2万+

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 320

Go项目中使用replace指令实现本地模块替换的解决方案

在Go 1.17及之前版本中,go module机制在处理本地开发模块时体验不够好。为了解决这一问题,可以通过以下步骤让module a引用本地正在开发的module b: 在module a的go.mod文件中手动添加require github.com/user/repo v1.0.0,其中v1.0.0是临时版本号。 使用replace指令将上述require替换为本地module b的路径,格式为replace github.com/user/repo v1.0.0 => module b本地路径。

weixin_44800208的博客 2079

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上)

这次项目使用的板子是stm32f103c8t6最小系统板,这个板子在tb上都能够买到,随便一个最小系统板都可以,== 注意在买最小系统板的时候需要买一个stlink下载器来下载程序。显示模块是使用的0.96英寸的OLED屏幕,注意是使用的IIC通信协议的OLED屏幕,不是使用SPI总线协议的。这次写的代码还顺便集成了检测温湿度的功能,所以要使用DHT11温湿度传感器,来采集温度。本文所设计的基于单片机的灯光控制系统主要由模式选择功能、手动模式和自动模式组成。LED灯自然就是要控制的部件了。

nbbskk的博客 6556

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7500

codeblocks如何导入项目_虽然不推荐,但万一你想要呢?如何使用go module导入本地包...

go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。最近Go1.14版本推出之后Go module功能已经被正式推荐在生产环境下使用了。这几天已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓库,我这里就不再啰嗦了。最近我发现很多小伙伴在群里问如何使...

weixin_32019949的博客 570

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1142

go语言导入git包_使用go module导入本地包的方法教程详解

go module 是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13 版本开始,go module 将是Go语言默认的依赖管理工具。到今天Go1.14 版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。这几天已经有很多教程讲解如何使用go module ,以及如何使用go module 导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很...

weixin_39606137的博客 977

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用go module导入本地包的方法教程详解

go module 是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13 版本开始,go module 将是Go语言默认的依赖管理工具。到今天Go1.14 版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。 这几天已经有很多教程讲解如何使用go module ,以及如何使用go module 导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发...

taoerchun的专栏 9021

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

golang使用go mod导入本地包和第三方包的问题

一、本地包和第三方包导入项目时遇到的问题 导入第三方包的方式: import "github.com/astaxie/beego" 导入本地包的方式: // 导入本地的一个命名为model的包 import "./model" 这个时候,如果使用go mod方式来管理包依赖,那么beego将正常下载安装并引入,但是本地的model包却会提示找不到 如果不使用go mod方式,并去掉...

hjxisking的专栏 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

golang导入git包_使用go module导入本地包的方法教程详解

go module 是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13 版本开始,go module 将是Go语言默认的依赖管理工具。到今天Go1.14 版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。这几天已经有很多教程讲解如何使用go module ,以及如何使用go module 导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很...

weixin_39942335的博客 854

Golang中利用Go Module模式实现导入本地包和外部包及同时解决相对路径的问题

golang中的相对路径

dengpost的博客 1万+

如何使用go module导入本地包

如何使用go module导入本地包 go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。 这几天已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很多小伙伴在群里问如何使用go module导入本地包,作为初学者大家刚开始接触package的时

ywtech的博客 2021

go module本地包导入

go module本地包导入

qq_23858785的博客 1687

go语言导入git包_使用go module导入本地包

go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。目前已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓库,我这里就不再啰嗦了。最近我发现很多小伙伴在群里问如何使用go ...

weixin_39699070的博客 493

golang 导入自定义包_Go Module 引入本地自定义包

最近由于项目要求,需要对 IPFS 源码进行修改,由于自己在此之前没有接触过 Go 语言,在使用 go mod 导入本地自己开发的工具包的时候折腾了好久才搞定。记录一下,以备后期查阅。Go 语言的 Module 新特性是在 go1.11 的发布之后才支持的,这是 Go 语言新的一套依赖管理系统。文章导读1. 启用 Go Module首先在默认情况下,$GOPATH 默认情况下是不支持 go mud...

weixin_39703926的博客 2221

Golang1.14 go modules 怎么导入本地其它项目的包? 看完这篇文章, 终于搞懂了

相信大家在本地使用go mod开发项目时, 肯定会遇到很多依赖包的问题。因为go mod在最近的1.13中使用了Go GO111MODULE· 模块进行包管理。 设置Go GO111MODULE 有的小伙伴使用过程中肯定非常痛苦,因为不是很熟练, 而且里面还有很多不人性化的设置,网上的资料甚少,都是一篇文章你抄我,我抄你, 查阅大量文章只后无果,一怒之下我决定好好研究一下go mod。 遇到的问题...

普通Gopher 9171

go语言中VScode中如何使用go module导入包,一篇带你学会 ~~~

亲测各种go module的使用方法,都没我写的详细,看到即赚到

weixin_44706683的博客 5657
上一篇: gin框架下参数的自定义验证小示例
下一篇: gin项目运行时找不到包,提示package casbin_test/controler is not in GOROOT 的解决办法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

php、go编程学习实例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值