如何注释它们在其他项目之间共享的符号?

How to annotate symbols that they are shared among other projects?

假设我有一个 Go 项目,它在另一个 Go 项目中充当共享库。如何标记在该项目外使用的 Go 符号(consts、structs、vars)?

我想潜在的问题是我很难知道哪个代码使用了所述符号。

请注意:这与语义版本控制无关,我非常了解并且使用它。我知道 Semver 可以帮助识别重大变化。

相反,这是关于查明我是否真的破坏了我自己的项目之一(比较:This symbol should be unexported or used outside the package)。我正在考虑 Go 中不存在的某种注释。

顺便说一句,IntelliJ 也不知道并将这些符号标记为 "Unnecessarily exported"。也许以 IntelliJ 为中心的解决方案就足够了。

为了说明我的问题:

package sharedlib

import "time"

// MyFavoriteTimeFormat is a blablabla...
const MyFavoriteTimeFormat = Time.RFC3339
package dependingproject

import "github.com/thething/sharedlib"
import "time"

func convertToString(timestamp time.Time) string {
    return timestamp.Format(sharedlib.MyFavoriteTimeFormat)
}

当我愉快地重命名MyFavoriteTimeFormate并发布它时,代码会在更新依赖项时中断依赖项目。

在其他包需要之前不要导出任何东西。如果另一个包需要什么东西,那就导出,然后你就会知道,如果导出了什么东西,那是因为它在包外面使用。并且不要对导出的标识符进行重大更改。如果确实需要,则增加主要版本。使用 go modules,不会破坏现有的其他包,他们将继续使用旧版本。

如果您的模块被分解成多个包(因为它是 "big"),并且您希望只为模块的其他包导出一些东西,那么请使用内部包概念,这样它会仍然 "unexported" (不可导入)到其他模块。详情见