首頁  >  文章  >  後端開發  >  Golang 無法“sqlc 產生”

Golang 無法“sqlc 產生”

王林
王林轉載
2024-02-09 11:09:181089瀏覽

Golang 无法“sqlc 生成”

php小編香蕉為您帶來關於Golang的重要問題:無法使用sqlc產生程式碼的問題。 Golang作為一種強大的程式語言,常被用於開發高效且可靠的後端應用程式。然而,一些開發者在使用sqlc時遇到了問題,無法產生所需的程式碼。這個問題給開發者帶來了困擾,因此我們將在本文中探討可能的原因,並提供解決方案,幫助您解決這個疑惑。讓我們一起來看看吧!

問題內容

我使用的是 Windows 和 Ubuntu WSL,但當我嘗試產生 sqlc 時出現此錯誤。

sqlc generate
# package database
sql/schema/001_users.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.
export CGO_ENABLED=1 && sqlc generate
# package database
sql/schema/001_users.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.

當我嘗試 go env 指令,但它在我的環境中但仍然無法產生 sqlc

go env

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOENV='/home/user/.config/go/env'
.
.
.
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
.
.
.
CGO_ENABLED='1'
GOMOD='/mnt/c/Users/User/Desktop/Golang/main/go.mod'

解決方法

我能夠在全新安裝的 WSL2 Ubuntu 22.04(在 Win 11 上運行)上複製此內容。使用新映像,我安裝了Go (1.21.4) 和sqlc (v1.23.0),然後運行sqlcgenerate(使用問題中提到的教程中的範例存儲庫)並收到錯誤:

# package database
sql/schema/001_users.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.
sql/schema/002_users_apikey.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.
sql/schema/003_feeds.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.

有趣的是,在 Ubuntu 20.04 下一切都運作良好(也在 WSL2 上)。

Ubuntu 20.04 和支援CGO 的二進位檔案的兼容性存在問題 22.04(沒有真正詳細研究這個問題!);所以似乎值得嘗試重新安裝sqlc 並啟用CGO

go env -w CGO_ENABLED=1
sudo apt update
sudo apt install gcc
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest

完成此操作後,sqlc 起作用了(成功為 6-createfeed 範例產生了 go 文件,沒有問題)。

注意:由於這有效,我想我應該為任何類似的sqlc 問題添加評論 a> 並遇到此評論建議相同的基本解決方案(我昨晚看的時候沒有發現這一點)。

以上是Golang 無法“sqlc 產生”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除