当前位置: 首页 > ai >正文

golang项目中如何使用私密仓库的扩展包

在go项目中,一般会经常使用import关键词来引入第三方的扩展包,比如:

package xxximport ("context""github.com/zeromicro/go-zero/core/logx"
)

上面的"github.com/zeromicro/go-zero/core/logx" 就是一个第三方扩展包,通俗的说,就是别人造好的一个轮子,我们直接拿来用。但是看,有些时候,我们需要引入一些私密仓库的扩展包,比如公司内部的仓库,不对外开放,如果像上面的方式直接引入的话就会报错。

比如,我这里有一个自己创建的sdk,存储到gitee平台,并且设置为私密仓库。然后在另外一个项目中引入,就会报错:

go get gitee.com/rxbook/rx_gosdk_demo

image-20250605103926706

接下来,就来实际操作一下,如何在自己的项目中引入私密仓库的扩展包。

首先,上面的gitee.com/rxbook/rx_gosdk_demo 里面的内容很简单,就是一个go文件,实现了“合并多个Excel为一个”的逻辑。核心代码如下:

mergeExcel.go

package mergeExcelimport ("errors""fmt""github.com/tealeg/xlsx""io/ioutil""os""path/filepath"
)// MergeExcelFiles 合并Excel文件
// sourceFilePath:需要合并的Excel文件所在的目录,比如 /home/rx/Documents/tmp_64c20e88848fb
// outputFileName:输出的文件名称,比如 result.xlsx
func MergeExcelFiles(sourceFilePath string, outputFileName string) (string, error) {if sourceFilePath == "" || outputFileName == "" {return "", errors.New("sourceFilePath or outputFileName is empty")}dir, err := ioutil.ReadDir(sourceFilePath)if err != nil {return "", errors.New("open sourceFilePath failed: " + err.Error())}//设置输出文件的完整路径,放在sourceFilePath的同级目录下outputDir := sourceFilePath + "/../" + outputFileNameoutputDir, err = filepath.Abs(outputDir)if err != nil {return "", errors.New("get outputDir failed: " + err.Error())}//合并后的文件var newFile *xlsx.Filevar newSheet *xlsx.SheetnewFile = xlsx.NewFile()var newErr errornewSheet, newErr = newFile.AddSheet("Sheet1")for _, fi := range dir {if newErr != nil {return "", newErr}//读取文件xlFile, err := xlsx.OpenFile(sourceFilePath + string(os.PathSeparator) + fi.Name())if err != nil {return "", errors.New("open failed: " + err.Error())}for _, sheet := range xlFile.Sheets {num := 0skipNum := 0 //跳过的行数for _, row := range sheet.Rows {num++//跳过前面多少行if num <= skipNum {continue}//将后面的行写入新的文件newRow := newSheet.AddRow()//newRow.SetHeightCM(1)for _, cell := range row.Cells {text := cell.String()//fmt.Printf("%s\n", text)newCell := newRow.AddCell()newCell.Value = text}}}}//写入文件newErr = newFile.Save(outputDir)if newErr != nil {return "", errors.New("写入文件失败:" + newErr.Error())}return outputDir, nil
}func SayHello() {fmt.Println("Nothing,Just Say Hello!")
}

设定 go.mod ,需要注意,这里的module要写完整的仓库地址,因为将来在其他项目中引入的时候要用到这个仓库地址。

这里的完整的仓库地址就是:gitee.com/rxbook/rx_gosdk_demo

module gitee.com/rxbook/rx_gosdk_demogo 1.23.3require github.com/tealeg/xlsx v1.0.5

以上就是所有的代码逻辑,接下来写一个测试用例,我们自己先来测试一下这个扩展包是可用的,再发布到远程仓库,确保其他人使用的时候是没问题的。

merge_test.go

package mergeExcelimport "testing"func TestMergeExcelFiles(t *testing.T) {resultFilePath, err := MergeExcelFiles("/Users/renxing/Documents/test1/bank", "银行网点.xlsx")if err != nil {t.Errorf("MergeExcelFiles failed: %v", err)return}t.Logf("MergeExcelFiles success, resultFilePath: %s", resultFilePath)
}func TestSayHello(t *testing.T) {// 测试 SayHello 函数SayHello()
}

执行以上测试用例,发现可以实现预期目标,将3个Excel文件合并成了1个:

image-20250605111140368

加下来,就要配置在其他项目中引入这个私密仓库的扩展包了。

首先,设置go envGOPRIVATE,命令如下:

go env -w GOPRIVATE=gitee.com # 这里的GOPRIVATE设置成指定的私密仓库的HOST,如果是github的,就改为 GOPRIVATE=github.com

接下来,如果是Mac或Linux系统,则如下设置: sudo vim ~/.netrc ,写入如下内容:

machine gitee.com login 你的仓库登录账号 password 你的仓库登录密码

如果是Windows系统,稍微有点不同,不是 修改 ~/.netrc文件,而是:C:\Users\<你的用户名>\_netrc 这个文件。写入的内容是相同的。

如果是阿里云的云效仓库:
go env -w GOPRIVATE=codeup.aliyun.com

sudo vim ~/.netrc 写入:
machine codeup.aliyun.com login 登录账户 password 登录密码

这样配置之后,再来 go get gitee.com/rxbook/rx_gosdk_demo 就可以了:

image-20250605110238363

然后,在要使用的项目中,直接调用上面仓库中写的两个方法,也是没有问题的。

image-20250605110608699

通过这样的方式,可以实现团队内部的底层扩展和实际业务解耦,方便更多的业务复用。

特别说明:如果按照上面的方式还是不能安装 gitee.com 的私密扩展,那么就在项目同级目录创建一个 my_sdk 目录,

然后手动克隆 git@gitee.com:rxbook/rx_gosdk_demo.git

接下来,在当前项目的 go.mod 中添加:

replace gitee.com/rxbook/rx_gosdk_demo => ../my_sdk/rx_gosdk_demo

http://www.xdnf.cn/news/12514.html

相关文章:

  • 1.4 Node.js 的 TCP 和 UDP
  • 基于 STM32 的四路 PWM 控制智能小车运动的模块化控制程序
  • PDF图片和表格等信息提取开源项目
  • FastAPI安全机制:从OAuth2到JWT的魔法通关秘籍
  • Web前端基础:JavaScript
  • C++字符串解析2
  • yolov11与双目测距结合,实现目标的识别和定位测距(onnx版本)
  • Docker、Wsl 打包迁移环境
  • |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面
  • pycharm 中文字体报错
  • 从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)
  • Android Studio 解决首次安装时下载 Gradle 慢问题
  • spring中的@RabbitListener注解详解
  • C++设计模式 - 单例模式
  • Python Copilot【代码辅助工具】 简介
  • AI数据分析在体育中的应用:技术与实践
  • 初识结构体,整型提升及操作符的属性
  • 12.6Swing控件4 JSplitPane JTabbedPane
  • 第六章 进阶18 小杨的困惑
  • 博弈论概述
  • 网络库libhv介绍
  • Selenium自动化测试之弹窗处理
  • [Python学习日记-91] 并发编程之多线程 —— threading 模块、开启线程的方式、线程相关的其他方法
  • 腾讯加持,销售易 CRM 优势几何?
  • 本机无法远程别的计算机的方法
  • 自制喜悦字贴
  • QILSTE 精巧电子元件H4-108FO/5M解析
  • 观测云OaC能力升级,通过Terraform实现配置闭环
  • MySQL基础(一)介绍、下载及安装
  • w384药品管理系统的设计与实现