


Menggunakan sqlc
untuk menghasilkan kod SQL yang selamat jenis di GO adalah cara yang kuat untuk menulis interaksi pangkalan data tanpa mengorbankan prestasi atau keselamatan. Daripada menulis kod ORM boilerplate atau berurusan dengan pertanyaan SQL mentah yang terdedah kepada kesilapan runtime, sqlc
menyusun pertanyaan SQL anda ke dalam kod GO-SAFE pada masa membina. Berikut adalah cara untuk menetapkannya dan menggunakannya dengan berkesan.

1. Pasang SQLC
Pertama, pasang alat sqlc
CLI. Anda boleh menggunakan salah satu kaedah berikut:
# Menggunakan skrip curl dan pasang (disyorkan) Curl https://sqlc.dev/install.sh | sh # Atau menggunakan homebrew (macOS) Brew Install SQLC
Sahkan pemasangan:

Versi SQLC
2. Sediakan struktur projek anda
Persediaan biasa termasuk:
projek anda/ ├── db/ │ ├── query.sql │ └── Skema.sql ├── sqlc.yaml └── Go.mod
-
db/schema.sql
: Mengandungi skema pangkalan data anda (jadual, indeks). -
db/query.sql
: Mengandungi pertanyaan SQL anda. -
sqlc.yaml
: Fail konfigurasi untuk SQLC.
Pastikan anda mempunyai fail go.mod
yang dimulakan:

Go Mod init-Nama Projek Anda
3. Tentukan skema pangkalan data anda
Dalam db/schema.sql
, tentukan jadual anda. Contohnya:
Buat pengarang jadual ( Kunci utama ID Bigserial, Nama teks tidak batal, teks bio );
4. Tulis pertanyaan SQL dengan komen khas
Dalam db/query.sql
, tulis pertanyaan anda menggunakan khas -- name:
Komen So SQLC boleh menghasilkan fungsi.
- Nama: CreateAuthor: EXEC Masukkan ke dalam nilai penulis (nama, bio) ($ 1, $ 2); - Nama: GetAuthor: Satu Pilih * dari pengarang di mana id = $ 1; - Nama: ListAuthors: Banyak Pilih * dari pesanan penulis dengan nama;
Inilah maksud anotasi:
-
:exec
- Query Executes tetapi mengembalikan tiada hasil (misalnya, masukkan). -
:one
- mengharapkan satu baris (mengembalikan struktur). -
:many
- mengembalikan sifar atau lebih baris (mengembalikan sepotong structs).
5. Konfigurasi SQLC.Yaml
Buat sqlc.yaml
dalam root projek anda:
Versi: "2" Pakej: - Nama: "DB" Laluan: "DB" Pertanyaan: "db/query.sql" Skema: "DB/Schema.sql" Enjin: "PostgreSQL" EMIT_JSON_TAGS: Benar eMit_Prepared_queries: palsu EMIT_INTERFACE: Benar EMIT_EXACT_TABLE_NAMES: Benar
Pilihan Utama:
-
engine
: Gunakan"postgresql"
atau"mysql"
. -
emit_json_tags
: Menambahjson:
Tag ke Struktur untuk kegunaan API. -
emit_interface
: Menjana antara muka untuk kaedah pertanyaan anda (berguna untuk mengejek). -
emit_exact_table_names
: Menggunakan nama meja yang tepat dan bukannya pluralisasi.
6. Menjana kod Go
Jalankan SQLC untuk menjana kod Go:
SQLC menjana
Ini mewujudkan fail GO dalam direktori db/
, seperti:
-
db.go
- MengandungiQueries
Struktur dan antara muka. -
models.go
- Mengandungi GO Structs dipetakan ke meja anda. -
query.go
- Mengandungi kaedah yang dihasilkan sepertiCreateAuthor
,GetAuthor
, dll.
Contoh tandatangan fungsi yang dihasilkan:
Func (Q *Queries) CreateAuthor (ctx context.context, name string, bio sql.nullstring) ralat
7. Gunakan kod yang dihasilkan dalam aplikasi anda
Sekarang gunakan kod yang dihasilkan di aplikasi Go anda:
Pakej utama import ( "Konteks" "Pangkalan Data/SQL" "Log" _ "github.com/lib/pq" "Projek anda/db" ) func main () { conn, err: = sql.open ("postgres", "user = pascgres password = rahsia dbName = contoh sslmode = disable") jika err! = nil { log.fatal (err) } menangguhkan conn.close () db: = db.new (conn) // Masukkan pengarang baru err = db.createAuthor (context.background (), "alice", sql.nullstring {string: "tech writer", sah: true}) jika err! = nil { log.fatal (err) } // pertanyaan satu pengarang pengarang, err: = db.getAuthor (context.background (), 1) jika err! = nil { log.fatal (err) } log.printf ("Pengarang: %s", pengarang.name) }
Petua dan amalan terbaik
Gunakan Parameter Dinamakan (Pilihan) : SQLC menyokong sintaks
@param
untuk kejelasan:- Nama: GetAuthorByNames: Banyak Pilih * dari pengarang di mana nama = @name atau bio = @bio;
Menjana:
func (q *Queries) GetAuthorByNames(ctx context.Context, arg GetAuthorByNamesParams) ([]Author, error)
Sesuaikan nama medan struktur : Gunakan alias lajur dalam pilih untuk mengawal nama medan:
- Nama: GetAuthorWithalias: Satu Pilih ID, Nama sebagai FullName dari penulis di mana id = $ 1;
→ Menjana struktur dengan
FullName string
.Simpan skema dan pertanyaan dalam penyegerakan : SQLC mengesahkan pertanyaan terhadap skema anda pada masa kompilasi - lajur atau jenis yang tidak sesuai akan gagal.
Regenerate pada Perubahan : Tambah
sqlc generate
saluran paip binaan anda atau gunakan pemerhati fail semasa pembangunan.
Menggunakan sqlc
memberi anda kuasa penuh SQL dengan keselamatan sistem jenis GO. Anda mengelakkan kesilapan SQL runtime, mengurangkan boilerplate, dan mengekalkan prestasi tinggi. Ia amat berguna untuk aplikasi sederhana dan besar di mana penyelenggaraan dan ketepatan perkara.
Pada asasnya, tulis SQL, jalankan sqlc generate
, dan pergi.
Atas ialah kandungan terperinci Cara Menggunakan SQLC untuk Menjana Kod SQL Jenis-selamat Di GO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Goprovidessimpleandefficientfilehandlingingtheosandbufiopackages.toreadasmallfileentirely, useos.readfile, whittloadsthecontentintomemorysafelyandautomatikManageSoperations.forlargefilesorincrementalprementalprementalprementrementprementalplocessing,

Struct {} adalah struktur tanpa medan di GO, yang menduduki bait sifar dan sering digunakan dalam senario di mana data tidak diperlukan. Ia digunakan sebagai isyarat dalam saluran, seperti penyegerakan goroutine; 2. Digunakan sebagai koleksi jenis nilai peta untuk mencapai pemeriksaan kewujudan utama dalam ingatan yang cekap; 3. Penerima kaedah tanpa stateless yang pasti, sesuai untuk suntikan pergantungan atau fungsi organisasi. Jenis ini digunakan secara meluas untuk mengekspresikan aliran kawalan dan niat yang jelas.

Anggap yang mengasyik,

Cgoenablesgotocallccode, membolehkanIntegrationWithClibrariesLikeopenssl, AccessTolow-levelsystemapi, danPerformanceoptimization; iTrequiresimporting "C" withcheadersincomments, usesc.function () syntax, dandemandscareffemoryMangage

Gunakan pakej pengekodan/json perpustakaan standard untuk membaca fail konfigurasi JSON; 2. Gunakan perpustakaan Gopkg.in/yaml.v3 untuk membaca konfigurasi format YAML; 3. Gunakan Perpustakaan OS.Getenv atau Godotenv untuk menimpa konfigurasi fail; 4. Gunakan perpustakaan Viper untuk menyokong fungsi lanjutan seperti konfigurasi pelbagai format, pembolehubah persekitaran, tambah nilai automatik; Adalah perlu untuk menentukan struktur untuk memastikan keselamatan jenis, mengendalikan kesilapan fail dan parsing dengan betul, menggunakan medan pemetaan tag struktur dengan betul, mengelakkan laluan berkod keras, dan mengesyorkan menggunakan pembolehubah persekitaran atau penyimpanan konfigurasi yang selamat dalam persekitaran pengeluaran. Ia boleh bermula dengan JSON yang mudah dan berhijrah ke Viper apabila keperluannya kompleks.

Artikel ini bertujuan untuk menyelesaikan kesilapan "undefined" yang ditemui dalam GO ketika cuba menggunakan strconv.itoa64 untuk penukaran integer-to-string. Kami akan menjelaskan mengapa Itoa64 tidak wujud dan memberi butiran mengenai alternatif yang betul kepada strconv.FormatInt dalam pakej STRCONV. Melalui kod contoh, pembaca akan belajar bagaimana untuk menukarkan jenis integer secara efisien dan tepat ke dalam perwakilan rentetan dalam partisi tertentu, elakkan perangkap pengaturcaraan biasa dan meningkatkan kekukuhan kod dan kebolehbacaan.

Pasang alat SQLCCLI, disarankan untuk menggunakan skrip curl atau homebrew; 2. Buat struktur projek, termasuk db/skema.sql (struktur jadual), db/query.sql (pertanyaan anotasi) dan fail konfigurasi sqlc.yaml; 3. Tentukan jadual pangkalan data dalam skema.sql; 4. Tulis pertanyaan SQL dengan -nama: anotasi dan: exec/: one/: banyak arahan dalam query.sqlc.yaml; 5. Konfigurasi SQLC.YAML untuk menentukan laluan pakej, fail pertanyaan, fail skema, enjin pangkalan data dan pilihan generasi; 6. Jalankan SQLCGenerate untuk menjana kod Go Type-Safe, termasuk model, kaedah pertanyaan dan antara muka

Melaksanakan Serialization JSON dan deserialization struktur GO yang disesuaikan untuk Marshaljson dan Unmarshaljson, sesuai untuk mengendalikan format bukan standard atau serasi dengan data lama. 2. Mengawal struktur output melalui Marshaljson, seperti format medan menukar; 3. Parsing data format khas melalui Unmarshaljson, seperti tarikh tersuai; 4. Beri perhatian untuk mengelakkan gelung tak terhingga yang disebabkan oleh panggilan rekursif, dan gunakan alias jenis untuk memintas kaedah tersuai.
