Heim  >  Artikel  >  Backend-Entwicklung  >  Golang kann nicht „sqlc generieren“

Golang kann nicht „sqlc generieren“

王林
王林nach vorne
2024-02-09 11:09:181087Durchsuche

Golang 无法“sqlc 生成”

Der PHP-Editor Banana bringt Ihnen eine wichtige Frage zu Golang: das Problem, dass SQLC nicht zum Generieren von Code verwendet werden kann. Golang ist eine leistungsstarke Programmiersprache, die häufig zur Entwicklung effizienter und zuverlässiger Back-End-Anwendungen verwendet wird. Einige Entwickler sind jedoch auf Probleme bei der Verwendung von SQLC gestoßen und konnten den erforderlichen Code nicht generieren. Dieses Problem führt bei Entwicklern zu Verwirrung. In diesem Artikel werden wir die möglichen Ursachen untersuchen und Lösungen bereitstellen, die Ihnen bei der Lösung dieser Verwirrung helfen. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich verwende Windows und Ubuntu WSL, erhalte jedoch diese Fehlermeldung, wenn ich versuche, SQLC zu generieren.

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.

Wenn ich den Befehl go env ausprobiere, er sich in meiner Umgebung befindet, aber trotzdem kein SQLC generiert werden kann

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'

Workaround

Ich konnte dies bei einer Neuinstallation von WSL2 Ubuntu 22.04 (unter Win 11) replizieren. Mit dem neuen Image habe ich Go (1.21.4) und sqlc (v1.23.0),然后运行 ​​sqlcgenerate installiert (unter Verwendung des Beispiel-Repositorys aus dem in der Frage erwähnten Tutorial) und die Fehlermeldung erhalten:

# 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.

Interessanterweise funktioniert unter Ubuntu 20.04 (auch auf WSL2) alles einwandfrei.

Es gibt ein Kompatibilitätsproblem mit Ubuntu 20.04 und CGO-fähigen Binärdateien 22.04 (habe mich nicht wirklich im Detail mit diesem Problem befasst!); es scheint also einen Versuch wert, es neu zu installieren 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

Danach sqlc 起作用了(成功为 6-createfeed 示例生成了 goDatei, keine Probleme).

Hinweis: Da dies funktioniert, dachte ich, ich füge einen Kommentar für alle ähnlichen SQLC-Fragen a> hinzu und stoße auf diesen Kommentar, der die gleiche grundlegende Lösung vorschlägt (das habe ich gestern Abend beim Suchen nicht bemerkt).

Das obige ist der detaillierte Inhalt vonGolang kann nicht „sqlc generieren“. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen