go - 如何注释其他项目共享的符号?

标签 go intellij-idea shared-libraries visibility

假设我有一个 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/

相关文章:

c++ - 段错误和对 `dlopen' 的 undefined reference

android - 将.so添加到Xamarin android绑定(bind)库

go - Go Language Mysql如何设置Limit或查询?

api - 如何在Golang中从服务器发送Websocket

java - 找不到 Gradle 插件 ‘java-library’

android - 无法使用 Android-NDK 编译外部预编译共享库

go - fatal error : all goroutines are asleep - deadlock (again)

go - AWS API Gateway读取:连接因对等错误而重置

java - IntelliJ - 单个文件的代码完成/自动建议?

javascript - PHPStorm - Javascript 语法突出显示在 php 文件中不起作用