-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
Proposal Details
The cgo tool uses two directives, //export
and //extern
, that do not follow the now-standard Go directive syntax. I propose that we replace them. For compatibility reasons we can't remove support for the old versions, but we can encourage people to move to the new ones.
The //export
directive is used by cgo to indicate that a Go function should be made visible to C code. The format is //export NAME
, where NAME
is a C identifier. This means that C code can call the Go function by calling the function NAME
.
I propose that we change this to //go:export
. We should encourage new code to use //go;export NAME
rather than //export NAME
. We could make a modernizer for this that applies to files that import "C"
.
The //extern
directive is specific to gccgo. It sets the name to use for the following function. Today it can be fully replaced by //go:linkname
. I propose that we change cgo to emit an appropriate //go:linkname
directive rather than a //extern
directive. The few uses of //extern
in Go source code can be rewritten manually to //go:linkname
.