是否可以从 Go 应用程序检测 CGo 是否启用?

Fif*_*tiN 4 go cgo

My Go 应用程序可以与 MySQL、Postgres 和 SQLite 一起使用。在第一次启动时,它询问应该使用什么 DB。

SQLite 仅适用于 CGo。根据是否启用,SQLite 应显示在支持的数据库列表中。

是否可以从 Go 应用程序中检测 CGo 是否启用?

小智 8

使用构建约束来检测 CGO。将这两个文件添加到包中:

cgotrue.go:

// +build cgo

package yourPackageNameHere

const cgoEnabled = true
Run Code Online (Sandbox Code Playgroud)

cgofalse.go:

// +build !cgo

package yourPackageNameHere

const cgoEnabled = false
Run Code Online (Sandbox Code Playgroud)

仅编译其中一个文件。检查cgoEnabledconst 以确定 CGO 是否已启用。

另一种选择是将以下内容添加到始终编译的文件中:

var drivers []string{ "MySQL", "Postgres"}
Run Code Online (Sandbox Code Playgroud)

并将其发送到仅限 CGO 的文件:

// +build cgo

package yourPackageNameHere

func init() {
      drivers = append(drivers, "SQLite")
}
Run Code Online (Sandbox Code Playgroud)