自从上篇总结了一下Go 编程: 交叉编译 vs 条件编译之后,觉得有必要对于类似条件编译标签等特殊注释做一次简单收集。

1. 常规注释

每种开发语言都有自己的注释语法和格式,也大多类似。 Go 语言和市面上其它多种高级语言的注释语法也类似,主要有以下两种语法格式:

///* 注释内容 */
lint

但是,以上也就仅仅是正常情况。在很多特殊情况下,一些看似符合以上注释语法的地方,却不是注释,也是本文整理的重点。

2. “奇怪”的注释

2.1 条件编译

// +build条件编译标签// +build

例如:

// +build linux,386 darwin,!cgo
(linux AND 386) OR (darwin AND (NOT cgo))
// +build linux darwin
// +build 386
(linux OR darwin) AND 386

具体详细的条件编译的内容参考: Go 编程: 交叉编译 vs 条件编译.

2.2 二进制包

条件编译标签//go:binary-only-package$GOPATH/pkg/
//go:binary-only-package

package mypkg

代码中直接引用二进制包, 非常适用于一些敏感或者有一定壁垒的企业核心包的发布。

2.3 代码生成

在 Go 项目中,常常会看到很多符合这样的正则表达式的注释内容

^// Code generated .* DO NOT EDIT\.$
protocprotoc-gen-gostringer
go toolgenerate
//go:generate command argument...
go generate

2.4 Cgo代码块

如果在 Go 代码文件中,看到类似以下的注释:

/*
#include <stdio.h>
#include <stdlib.h>

void myprint(char* s) {
    printf("%s\n", s);
}
*/
import "C"
import "C"
#cgo
/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lclibrary

#include "clibrary.h"

int callOnMeGo_cgo(int in); // Forward declaration.
*/
import "C"
#cgo

3. 小结

以上就是我想到的一些奇怪的注释,如有遗漏,欢迎补充。

参考资源: