自从上篇总结了一下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. 小结
以上就是我想到的一些奇怪的注释,如有遗漏,欢迎补充。