Go 中语义注释有什么用?

2023-12-28

类推这个问题 https://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go关于标签,我注意到除了纯粹的评论之外,评论还有多种用途。

例子:

  • 去:生成 https://blog.golang.org/generate可用于代码生成。
  • godoc https://blog.golang.org/godoc-documenting-go-code使用函数名称来指示它应该解释的注释
  • build https://golang.org/pkg/go/build/限制条件

还有其他我错过的吗?

有没有明确的清单?

一些第三方软件包,例如合约 https://github.com/Parquery/gocontracts and 趾高气昂 https://github.com/go-swagger也使用它们。他们怎样才能避免彼此冲突呢?


如前所述注释是 go 中的指令 http://news.ycombinator.com/item?id=9522973不仅仅是评论。

在撰写本文时,还没有明确的清单。 这被记录为golang 问题 28532 https://github.com/golang/go/issues/28532.

因此我建议用这个答案来做一个。

在 go 核心语言和工具本身中的用途:

  • 去:生成 https://blog.golang.org/generate可用于代码生成。
  • godoc https://blog.golang.org/godoc-documenting-go-code使用函数名称来指示它应该解释的注释
  • Examples https://blog.golang.org/examples- 记录测试的预期输出(感谢@Butuzov)
  • build https://golang.org/pkg/go/build/约束(以 ' 开头// +构建')
  • 导入评论 https://golang.org/pkg/cmd/go/#hdr-Import_path_checking e.g. '包数学 // 导入“路径”'

在第三方软件包中的显着用途

  • 合约 https://github.com/Parquery/gocontracts- 将前提条件指定为注释
  • 趾高气昂 https://github.com/go-swagger- 使用 swagger 记录 ReST API
  • golangci https://github.com/golangci/golangci-lint#false-positives例如//nolint[:linter1,linter2,...]

他们怎样才能避免彼此冲突呢?

如果您正在开发一个确实需要将注释视为属性的工具,并且希望避免与其他类似用途发生冲突,请在您的注释前添加诸如“的命名空间”{mytool}: "

在命名空间方面有一些有意识的尝试。 go 内置的神奇注释使用“go:”前缀,如“go:generate” (除非他们不这样做)

go-swagger 使用“swagger:”

但是,您仍然需要谨慎对待这个问题,并检查此处的列表或您可以找到的任何其他来源。

还要考虑评论是否是最好的or only https://github.com/Parquery/gocontracts/issues/22方法而不是使用函数。 比较例如(合约 https://github.com/Parquery/gocontracts):

// SomeFunc ensures:
//  * !strings.HasSuffix(result, "smth")
func SomeFunc(x int) (result string) {
    // ...
}

with (godbc https://godoc.org/github.com/lpabon/godbc)

func SomeFunc(x int) (result string) {
    godbc.Require(strings.HasSuffix(result,"smth");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 中语义注释有什么用? 的相关文章

  • 带有导出字段的私有类型

    在 Go 教程的第二天有这样的练习 为什么拥有带有导出字段的私有类型会很有用 例如 package geometry type point struct X Y int name string 请注意point是小写的 因此不会导出 而字段
  • Goroutine 是如何工作的? (或者:goroutines 和操作系统线程的关系)

    其他 goroutine 如何在调用系统调用时继续执行 当使用 GOMAXPROCS 1 时 据我所知 当调用系统调用时 线程会放弃控制权 直到系统调用返回 Go 如何在不为每个阻塞系统调用 goroutine 创建系统线程的情况下实现这种
  • 命名和未命名类型

    问题 我最近开始阅读Golang规格手册 https golang org ref spec并陷入试图理解的困境有名和无名类型在相关部分 https golang org ref spec Types 我来自动态语言 这让我有点头疼 手册指
  • GO中的优先级队列

    谁能向我解释一下 我想在GO中实现一个优先级队列 接口实现来自link https golang org pkg container heap example priorityQueue 但优先级最低 我的代码 pq make Priori
  • 是否可以在 Golang 中 pickle 结构实例

    我正在 Golang 中做一些机器学习 我现在碰壁了 我训练有素的分类器需要将近半分钟的时间来训练 并且想要保存分类器的该实例 这样我就不必每次都从头开始训练 在 Golang 中应该如何去做呢 仅供参考 我的分类器是一个结构 当我用 py
  • 无法从另一个标签的源代码构建和安装 go

    我正在尝试使用此从源代码构建和安装 go文档 https go dev doc install source 当我喜欢以下内容时 这效果很好 git clone https go googlesource com go goroot cd
  • 数据库连接最佳实践

    我有一个使用 net http 的应用程序 我使用 http 注册了一些处理程序 这些处理程序需要从数据库中获取一些内容 然后才能继续编写响应并完成请求 我的问题是连接到该数据库的最佳实践是什么 我希望它能够以每分钟 1 个请求或每秒 10
  • java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 apache beam Spark runner 运行 go 示例时

    我想跑grades https github com apache beam tree master sdks go examples gradesapache beam go sdk 提出的示例 在一个主服务器和两个从服务器 spark2
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • Go API 在 html 中显示 swagger api 规范 (json) (Swagger UI)

    我有一个服务于特定端口的应用程序 gorilla mux 我也有一个 json 文件形式的 swagger API 规范 是否有任何 go API 可以像 spring boot 一样从 JSON 文件生成 swagger UI 定义 我正
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 使用 crypto/ssh 的 golang scp 文件

    我正在尝试通过 ssh 下载远程文件 以下方法在 shell 上运行良好 ssh hostname tar cz opt local folder gt folder tar gz 然而 golang 上的相同方法在输出工件大小方面存在一些
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1

随机推荐

  • Mockito ArgumentCaptor 返回 Null

    我正在尝试使用 Mockito ArgumentCaptor 在我的方法中获取 mime 消息 当我取回捕获对象时 它的值为空 我对调试它很陌生 但 Mockito 用增强器包装了它 所以我看不到内容 这适用于我的方法中的对象 有人有想法吗
  • Zookeeper/SASL 校验和失败

    如何修复生成此错误的问题 WARN NIOServerCxn Factory 0 0 0 0 0 0 0 0 2181 ZooKeeperServer 1040 Client failed to SASL authenticate java
  • Mercurial 如何压缩存储库中的文件?

    我发现 Mercurial 有效地压缩了存储库中的文件 repo hg store data 有谁知道存储库文件使用哪种压缩方式 Thanks Mercurial 存储库中有两个压缩级别 增量存储和zlib压缩 https www merc
  • Flask登录成功后如何重定向到上一页

    我有一个网络应用程序 我不使用 Flask 登录 如果用户访问链接但未登录 我会将用户重定向到登录页面 我在会话中设置 用户名 并检查当用户尝试直接访问某些链接而不登录时 即在这种情况下用户名将为空 我尝试遵循这个二氧化硫溶液 https
  • 如何为 Angular 2 安装和导入 paperjs?

    我尝试使用命令安装 paperjs sudo npm install paper 在我的角度应用程序文件夹中 纸张似乎出现在 node modules 文件夹中 但是当我尝试使用导入它时 import Paper from paper 它没
  • 检查触发器是否存在

    我对公共模式中所有表的触发器有以下查询 SELECT CREATE TRIGGER tab name if modified trg INSERT OR UPDATE OR DELETE ON tab name FOR EACH ROW E
  • Angular 使用变量或循环创建选择器标签

    我需要使用变量创建 app component html 的选择器标签 假设变量名称为 componentVar string 我需要我的 app component html
  • 如何为 Azure 中的每个分支设置不同的管道

    我有一个项目 但有两个 主 分支 master 虚拟 主控 他们每个人都会有自己的azure pipeline yml具体针对他们的分支机构 第一条管道在master触发器设置为 trigger batch true branches in
  • 返回花括号在 javascript 中意味着什么(例如 return { init : init} )[重复]

    这个问题在这里已经有答案了 我正在查看这段代码 function var sidescroll function init function STUFF return init init What does this do sidescro
  • 以编程方式创建 UITextField 事件

    我在创建行时以编程方式将文本字段添加到 TableView 中 我试图通过这样做来订阅这些文本字段的 TouchUpInside 事件 UITextField eTextField UITextField alloc initWithFra
  • Android 垃圾收集器是否会在运行时暂停其他应用程序?

    我发现一些关于 Android 垃圾收集器的信息与我矛盾 Android 开发者指南 说道 Android 3 0 是该平台的第一个版本 旨在运行于 单核或多核处理器架构 各种各样 Dalvik VM Bionic 库和其他地方的更改增加了
  • Clang 融合乘加取决于表达式参数的恒定性

    正如答案中所示clang 14 0 0 浮点优化 https stackoverflow com questions 73985098 clang 14 0 0 floating point optimizations 自版本 14 起 C
  • 使用 Cython 优化 NumPy

    我目前正在尝试优化我用纯Python编写的代码 这段代码使用NumPy http en wikipedia org wiki NumPy当我使用 NumPy 数组时 工作量非常大 下面你可以看到我转换成的最简单的课程Cython http
  • 多个 join 语句未返回预期结果

    我必须编写一个具有以下要求的查询 查询应该返回所有的列表 名为的客户的条目值 Steve 以及显示的每个日期 如果 可用 的最新状态详细信息 那个日期 顾客表 CustomerID CustomerName 1 Steve 2 John 参
  • 材料日期选择器中的奇怪行为

    我正在尝试使用物化日期选择器 http materializecss com forms html http materializecss com forms html 这样 我想在单击图标时弹出日期选择器 我已经实现了两种实现 其中两者之
  • 使用 C# 将行添加到 Word 文档 [重复]

    这个问题在这里已经有答案了 我使用 C 在 Word 文档中创建了一个表 我试图将行添加到表的末尾 现在我有 4 行的表 我尝试这样添加 int rowIndex 1 this Tables 1 Rows Add this Tables 1
  • 如何使用 CSS 或 jquery 使链接不可点击? [复制]

    这个问题在这里已经有答案了 我有以下 HTML ul class static li class static dynamic children a class static dynamic children menu item href
  • 提示用户输入信息,然后对数据进行排序

    对于一个班级项目 我需要用 Javascript 创建一个程序 要求用户输入 3 个名称 然后按字母顺序对名称进行排序并将其打印在屏幕上 我已经弄清楚如何创建一个提示框供用户输入数据 并且我可以让程序将用户输入的字符串打印到屏幕上 但是 我
  • 如何在 SQLite 中创建数据库并添加 2 个表

    我正在使用 SQLite ADO NET 提供程序 我想通过 vb net 中的代码创建一个包含 2 个表的数据库 请提供相同的代码 我正在使用 VS 2010 Winforms 在 XP SP3 Pro 下工作 使用 SQLiteConn
  • Go 中语义注释有什么用?

    类推这个问题 https stackoverflow com questions 10858787 what are the uses for tags in go关于标签 我注意到除了纯粹的评论之外 评论还有多种用途 例子 去 生成 ht