假设我有一个 Go 项目,它充当另一个 Go 项目中的共享库。如何标记在该项目之外使用的 Go 符号(常量、结构、变量)?
我想根本的问题是我很难知道哪些代码使用了所述符号。
请注意:这与语义版本控制无关,我非常清楚并使用它。我知道 Semver 可以帮助识别重大变更。
相反,这是为了查明我是否真的破坏了我自己的项目之一(相比之下:该符号应该不导出或在包外使用)。我正在考虑 Go 中不存在的某种注释。
顺便说一句,IntelliJ 也不知道,并将这些符号标记为“不必要导出”。也许以 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
并发布它时,代码将在更新依赖项时在依赖项目中中断。
最佳答案
在其他软件包需要之前不要导出任何内容。如果另一个包需要什么东西,那么就进行export,然后你就会知道,如果有东西被导出,那是因为它是在包之外使用的。并且不要对导出的标识符进行重大更改。如果确实必须,请增加主要版本。使用go模块,不会破坏现有的其他包,它们将继续使用旧版本。
如果您的模块被分解为多个包(因为它“大”),并且您希望仅为模块的其他包导出某些内容,则使用内部包概念,因此它仍然是“未导出” “(不可导入)到其他模块。详情见Can I develop a go package in multiple source directories?
关于go - 如何注释其他项目共享的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60303133/