【发布时间】:2020-06-19 16:46:48
【问题描述】:
我正在用 Go 编写一个库,我正在使用 CGo 将其编译为本机库,但是当导出函数时,函数声明和文档注释之间会出现令人讨厌的空行。
举个例子,假设我的 go 文件中有这个
/**
* Prints an integer.
*
* @param p0 an integer to print.
*/
//export PrintInteger
func PrintInteger(val C.int) {
fmt.Printf("%v", val);
}
在我的 C 头文件中导出后,它看起来像这样
/**
* Prints an integer.
*
* @param p0 an integer to print.
*/
extern void PrintInteger(int p0);
大多数情况下,该空行不是问题,但在某些 IDE 上,在解析该头文件时,它们很难正确显示智能感知,从而使头的使用更加困难。尤其是当你考虑到 cgo renames function parameters
有没有什么办法可以避免生成后不手动修改头文件?
编辑:
我发现 我认为 是 go 源代码中导致此问题的区域:
https://github.com/golang/go/blob/master/src/cmd/cgo/out.go#L922
【问题讨论】:
-
除了修复您已识别的代码(以删除额外的换行符)之外,我认为答案是否定的,您不能。我尝试了一些尝试使前缀块注释不以换行符结尾,这只会导致函数根本不被导出。 (不过,自动更新生成的头文件应该很容易:只需查找块注释结束序列,然后是空行,然后是
^extern .*);$,然后删除空行。) -
我最终自己提出了拉取请求。它是在今天下午刚刚合并的,所以这应该不会很快成为一件事情。 go-review.googlesource.com/c/go/+/222419