Go 应用程序可以检测 CGO_ENABLED 吗?

问题描述 投票:0回答:1

My Go 应用程序可以与 MySQL、Postgres 和 SQLite 配合使用。第一次启动时,它会询问应该使用什么数据库。

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

Go应用程序是否可以检测CGO_ENABLED=1?

go cgo
1个回答
7
投票

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

cgotrue.go:

//go:build cgo
    
package yourPackageNameHere
    
const cgoEnabled = true

cgofalse.go:

//go:build !cgo
    
package yourPackageNameHere
    
const cgoEnabled = false

仅编译其中一个文件。检查

cgoEnabled
常量以确定 CGO 已启用。

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

var drivers []string{ "MySQL", "Postgres"}

这是一个仅限 CGO 的文件:

//go:build cgo

package yourPackageNameHere
    
func init() {
      drivers = append(drivers, "SQLite")
}
© www.soinside.com 2019 - 2024. All rights reserved.