Heim > Artikel > Backend-Entwicklung > Go – Richtige Art, pgtypes zu verwenden
PHP-Editor Xigua stellt Ihnen heute eine korrekte Methode zur Verwendung von pgtypes vor, die für Entwickler, die die Go-Sprache für die PostgreSQL-Datenbankprogrammierung verwenden, sehr wichtig ist. pgtypes ist eine Go-Sprachbibliothek, die Konvertierungs- und Verarbeitungsfunktionen für und von PostgreSQL-Datenbanktypen bereitstellt. Durch die ordnungsgemäße Verwendung von pgtypes können Fehler und Ausnahmen beim Umgang mit Datenbanktypen vermieden und gleichzeitig die Lesbarkeit und Wartbarkeit Ihres Codes verbessert werden. In diesem Artikel erläutern wir die korrekte Verwendung von pgtypes sowie einige allgemeine Überlegungen und Best Practices. Wenn Sie ein Entwickler sind, der die Go-Sprache für die PostgreSQL-Datenbankprogrammierung verwendet, dann lesen Sie bitte weiter. Ich glaube, dass dieser Artikel für Sie hilfreich sein wird.
Ich entwickle einen einfachen Go
服务来连接到数据库进行基本查询。我正在使用 sqlc
生成 Go
函数来与数据库交互。当将驱动程序从 lib/pq
切换到 pgx/v5
时,现在数据库字段的类型是 pgtypes
而不是 Go
Typ. Hier ein Beispiel:
Stattdessen:
type ListAccountsParams struct { Owner string `json:"owner"` Limit int32 `json:"limit"` Offset int32 `json:"offset"` }
Ich verstehe jetzt:
type ListAccountsParams struct { Owner pgtype.Text `json:"owner"` Limit pgtype.Int4 `json:"limit"` Offset pgtype.Int4 `json:"offset"` }
Aber die einzige Möglichkeit, die ich gefunden habe, um pgtypes
zu verwenden, ist diese:
owner := pgtype.Text{ String: "Craigs List", Valid: true, }
statt nur auszuführen owner := "Craigs List"
. Für numerische Typen ist es noch übertriebener, alle Implementierungen, die ich gefunden habe, sahen so aus:
pgtype.Numeric{ Int: big.NewInt(-543), Exp: 3, Status: pgtype.Present }
Es hat keinen Sinn, sqlc
配置文件,我可以覆盖这些类型以支持 Go
标准类型,但是对我来说必须将 postgres text
类型覆盖为 string
usw. zu verwenden...
Meiner Meinung nach ist dies nicht die beste Art, diese Typen zu verwenden, es ist für mich kontraintuitiv. Meine Frage ist also: Mache ich es richtig? Gibt es einen anderen Ansatz? Gibt es letztendlich eine Möglichkeit, sqlc
so zu konfigurieren, dass Go
-Typen anstelle von sqlc
使用 Go
类型而不是 pgtypes
,同时仍然使用 pgx/v5
驱动程序?
您可以编辑 sqlc
配置文件,为要使用 Go 类型而不是 pgtype
类型的字段指定自定义类型,并通过在 sqlc.yaml
verwendet werden, während weiterhin der pgx/v5
-Treiber verwendet wird?
Problemumgehungpgtype
Sie können die sqlc
-Konfigurationsdatei bearbeiten, um benutzerdefinierte Typen für die Felder anzugeben, für die Sie Go-Typen anstelle von
-Typen verwenden möchten, und sie in der sqlc.yaml Datei Überschreiben Sie den Typ, indem Sie den erforderlichen Go-Typ in <strong> angeben
<pre class="brush:php;toolbar:false;">types:
- name: ListAccountsParams
fields:
- name: Owner
goType: string
- name: Limit
goType: int32
- name: Offset
goType: int32</pre>
</strong>Bitte beachten Sie, dass die direkte Verwendung von Go-Typen zu potenziellen Typkonflikten oder anderen Problemen bei der Interaktion mit der Datenbank führen kann, während
pgx/v5
驱动程序与 sqlc
一起使用时,生成的代码使用 pgtype
类型来处理 PostgreSQL 特定的数据类型,这是 sqlc
在使用 pgx/v5
驱动程序时的默认行为,以及方式您描述的使用 pgtype
类型,例如 pgtype.Text
和 pgtype.Int4
,是处理这些类型的正确方法,例如,在处理 pgtype.Text
类型时,您需要将 String
字段设置为所需的值,并将 Valid
字段设置为 true
pgtype.Numeric
类型需要设置Int
、Exp
和Status
字段,这是因为pgtype.Numeric
类型表示一个任意精度整数的数值(Int
) ), 指数(Exp
),以及一个状态(Status
pgx/v5
-Treibers mit sqlc
🎜 Typen, um PostgreSQL-spezifische Datentypen zu verarbeiten, die sqlc bei Verwendung des pgx/v5
-Treibers und die Art und Weise, wie Sie die Verwendung von 🎜-Typen wie pgtype.Text
und pgtype.Int4 beschreiben
ist die richtige Art, mit diesen Typen umzugehen. Wenn Sie beispielsweise den Typ pgtype.Text
verarbeiten, müssen Sie das Feld String
auf den erforderlichen Wert setzen und festlegen das Feld Valid
auf true
. 🎜
🎜Für numerische Typen 🎜) und gibt an, ob der Wert vorhanden oder leer ist! 🎜Das obige ist der detaillierte Inhalt vonGo – Richtige Art, pgtypes zu verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!