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

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

相关文章:

  • 【LLM大模型技术专题】「入门到精通系列教程」基于ai-openai-spring-boot-starter集成开发实战指南
  • uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步
  • vite+tailwind封装组件库
  • Android和硬件通信
  • 408第一季 - 数据结构 - 字符串和KMP算法
  • phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型
  • ubuntu20使用自主探索算法explore_lite实现机器人自主探索导航建图
  • PGSR : 基于平面的高斯溅射高保真表面重建【全流程分析与测试!】【2025最新版!!】
  • 中山大学美团港科大提出首个音频驱动多人对话视频生成MultiTalk,输入一个音频和提示,即可生成对应唇部、音频交互视频。
  • 【python与生活】如何构建一个解读IPO招股书的算法?
  • 机器学习的数学基础:神经网络
  • PCA笔记
  • Now formdata是什么?如何使用
  • SAP学习笔记 - 开发27 - 前端Fiori开发 Routing and Navigation(路由和导航)
  • STM32学习笔记:定时器(TIM)原理与应用(详解篇)
  • Linux进程(中)
  • AI大神吴恩达-提示词课程笔记
  • LLM 笔记:Speculative Decoding 投机采样
  • python并发编程
  • 【力扣】2434.使用机器人打印字典序最小的字符串
  • 网站是否wordpress/餐饮培训
  • 芜湖网站优化公司/小说推广平台有哪些
  • 制作网站建网站/怎么自己做一个网页
  • 房地产 网站 案例/专门做排行榜的软件
  • 手机移动网站设计/seo赚钱暴利
  • 山西本土网站建设/app推广地推接单网