Golang开发者都在哪里找包?有没有人对更好的解决方案感兴趣?

Golang开发者都在哪里找包?有没有人对更好的解决方案感兴趣? 我是Go语言的新手,但已经开始怀念像NPM那样的包发现工具了。虽然这个问题在很多地方都被问过,但我还是想问:大家是如何发现Go包的?

以下是我目前找到的一些途径。

  • pkg.go.dev(或 godoc.org
  • GitHub 上使用 language:go 关键词进行搜索
  • search.gocenter.io
  • go-search.org
  • awesome-go

我觉得这些途径在几个方面有所欠缺。

  • pkg.go.dev
    • 没有排序功能
    • 发布是通过代理使用吗?
  • godoc.org
    • 没有排序功能
    • 发布是通过显式搜索吗?
  • GitHub
    • 并非真正搜索可用的模块,只是所有Go语言项目。
    • 星标是衡量受欢迎程度的指标,而非使用量。
  • search.gocenter.io
    • 没有排序功能
    • 匹配效果很差
    • 必须发布到jfrog?
    • 总之不太好用。
  • go-search.org
    • 目前无法访问。
  • awesome-go
    • 只是一个静态文档。
  • 它们都没有任何元数据机制(如URL、作者、联系方式、关键词等)。

我在考虑创建一个网站,来添加一些我想要的功能。

  • 搜索并查看内联元数据
    • URL(问题跟踪器、主页等)
    • 作者/贡献者/联系方式
    • 组织
    • 关键词
    • 等等。
  • 排序功能
    • 受欢迎程度
      • 取以下最大值:收藏数、GitHub星标数或等效的GitHub星标数。
    • 导入次数
      • 基于索引包中 go.mod 的内容
    • 活跃度
      • 基于版本数量、发布频率、最近版本更新。
    • 质量
      • 测试等。
  • 保存“收藏”的包
  • 用于“发布”包的CLI工具
    • 一种将包显式添加到索引中的方式。
    • 引导元数据的初始化功能。

问这个问题可能有点冒险,但这样的项目对任何人来说会是有趣/有用/受欢迎的吗?

这也是我第二次涉足Go社区,所以我很想看看会得到什么样的回应 :)。


更多关于Golang开发者都在哪里找包?有没有人对更好的解决方案感兴趣?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

我通常直接谷歌搜索,go(lang) $topic package,这样通常能得到不错的结果。

更多关于Golang开发者都在哪里找包?有没有人对更好的解决方案感兴趣?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我通常使用 Godoc 来浏览我想要的包,仔细查看,如果发现有趣,就转到其相应的 GitHub 链接获取源代码。从未觉得这很繁琐。与其他语言相比,包发现一直更简单,在我看来。

对于Go包发现,目前确实主要依赖pkg.go.dev和GitHub搜索。你提到的痛点很实际,特别是缺少排序和元数据。下面是一个技术角度的分析:

现有工具的技术局限:

  1. pkg.go.dev的排序问题源于其设计重点在文档展示而非发现。它通过代理索引模块,但未公开排序API。
  2. GitHub搜索的language:go会匹配所有Go文件,包括非模块项目,需手动过滤。
  3. 元数据缺失是因为Go模块的go.mod仅包含必需字段(module、go、require),没有扩展元数据的标准方式。

实现方案的技术要点:

  • 元数据扩展:可在go.mod中添加//注释存储额外信息,或使用独立元数据文件(如.gometa.json)。示例:
// go.mod 注释示例
module github.com/user/pkg

go 1.21

// Metadata:
// keywords: http,router
// homepage: https://pkg.example.com
// repository: github.com/user/pkg
  • 索引构建:需爬取GitHub/GitLab和代理数据,解析go.mod及元数据。可定期同步代理更新。
  • 排序算法:需结合多源数据:
type PackageScore struct {
    Stars       int       // GitHub星标
    ImportCount int       // 解析go.mod统计
    RecentCommit time.Time // 最近提交
    TestCoverage float64  // 测试覆盖率(需分析)
}
  • CLI工具:可参考go mod命令设计,添加元数据初始化:
# 示例命令
gometa init --keywords="http,router" --homepage="https://pkg.example.com"

技术挑战:

  1. 数据一致性:需处理GitHub与代理间的版本差异。
  2. 导入量统计:需扫描公开代码库的go.mod,计算量较大。
  3. 质量指标:测试覆盖率等需静态分析或依赖第三方服务(如Coveralls)。

社区已有尝试:

  • lib.rs(Rust)的Go版本概念:部分功能可通过扩展pkg.go.dev实现,但需修改上游。
  • go-search.org曾尝试类似方案,但维护成本高导致关闭。

如果实现,建议先构建最小原型(如仅GitHub索引+基础排序),再逐步扩展。Go社区对工具类项目接受度较高,但需解决实际痛点而非重复造轮子。

回到顶部