”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何发布 Golang 包

如何发布 Golang 包

发布于2024-11-08
浏览:936

发布包是与世界分享您的工具的好方法。有人可以导入该包并在他们的项目中使用它,并实现您构建的功能。与其他语言相比,发布 Golang 包非常容易。我们将在这个博客中做到这一点。我最近发布了我的 GenCLI 包,您可以在这里查看。

出于演示目的,我有这个 CLI 项目。这个由人工智能驱动的 CLI。它通过使用 Cobra 和 Google Gemini API 构建的终端为您提供问题的答案。现在这个项目是本地的,运行它的唯一方法是转到项目的根目录并执行 go run main.go,然后使用子命令。它会工作得很好,但这里的问题是这并不可靠,每次我们都需要转到项目根目录并运行它,理想情况下,它应该从计算机上的任何位置运行,就像其他 CLI 工具一样。另外,并不是每个人都会这么麻烦地使用它。因此,这就是为什么发布这些工具是必要且重要的。

可以采用多种方式来命名您的包,但由于我们将在 GitHub 上托管它,因此我们将使用 GitHub 方式。确保您的 go.mod 文件中的模块名称符合以下约定 - github.com//,如下所示。

需要注意的一点是,模块是 Packages 的集合。我们通常说发布模块而不是包,但为了简单起见,我们保持这种方式。

module github.com/Pradumnasaraf/go-ai

go 1.22

require (
....
....
....

)

现在,一切设置完毕后,将您的代码推送到 GitHub。确保将代码推送到您在模块中提到的相同 GitHub 用户名和存储库名称。

将代码推送到 GitHub 后,现在就可以发布您的包了,但在此之前,您应该遵循以下一些最佳实践

  • 许可证:拥有许可证并尝试对其施加最小的限制,以便可以轻松使用、修改和重新分发。

  • 文档: 我们可以在包文件的顶部进行注释来解释功能,golang 将其作为通用包文档并将其显示在包文档部分下。

  • 标签: 当一个人拥有特定版本的包时,标记是很好的选择,并且标记的版本可以在构建过程中提供可预测的结果。标签应遵循 Semver。另外,尽量发布1.0.0及以上的稳定版本,这给开发者信心。

现在将包发布到 URL https://pkg.go.dev/github.com/。就我而言,它将是 https://pkg.go.dev/github.com/Pradumnasaraf/go-ai。当您访问时,您会看到一个请求按钮;单击该按钮请求将包添加到 pkg.go.dev。我不会,因为我不想发布这个工具,因为它只是为了演示。

How to Publish a Golang Package

完成后,几个小时后,它将出现在网站上。一旦上线,您可以使用 go install 命令下载 CLI:

go install 
go install github.com/Pradumnasaraf/go-ai@latest

本博客就是这样。我很高兴你还在阅读并且也成功了。谢谢你!我有时会在 Twitter 上分享有关 Golang 的技巧。你可以在那里与我联系。

版本声明 本文转载于:https://dev.to/pradumnasaraf/how-to-publish-a-golang-package-i12?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-07-01
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-07-01
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-01
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-07-01
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-07-01
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-07-01
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-07-01
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-07-01
  • 在Pandas中如何将年份和季度列合并为一个周期列?
    在Pandas中如何将年份和季度列合并为一个周期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 这个目标是通过组合“年度”和“季度”列来创建一个新列,以获取以下结果: [python中的concate...
    编程 发布于2025-07-01
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-07-01
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当需要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考...
    编程 发布于2025-07-01
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-07-01
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-07-01
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。本文深入研究了eval()和ast.literal_eval()之间的差异,突出显示其安全性含义...
    编程 发布于2025-07-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3