sqlc Go: SQL से type-safe कोड जनरेट करें
sqlc एक कंपाइलर है जो आपके SQL क्वेरीज़ के आधार पर Go कोड जनरेट करता है। डेटाबेस के लिए मैन्युअली फंक्शन लिखने के बजाय, आप सिर्फ SQL लिखते हैं और sqlc आपके लिए टाइप-सेफ, सुरक्षित और परफॉर्मेंट फंक्शन बनाता है। यह ORM से बिल्कुल अलग तरीका है: आप SQL पर पूरा नियंत्रण रखते हैं, लेकिन boilerplate कोड लिखने की झंझट से बच जाते हैं।
इसकी ज़रूरत क्यों है? सबसे पहले, sqlc कंपाइल टाइम पर type-safety की गारंटी देता है। अगर आप टेबल स्कीमा या क्वेरी बदलते हैं, तो sqlc कोड रीजनरेट करता है और Go कंपाइलर तुरंत बताता है कि कहाँ बदलाव करने हैं। दूसरा, परफॉर्मेंस: जनरेटेड कोड रिफ्लेक्शन या अनावश्यक एलोकेशन का उपयोग नहीं करता, जिससे यह मैन्युअल database/sql क्वेरीज़ जितना ही तेज़ होता है। तीसरा, कोड रिव्यू आसान होता है: SQL क्वेरीज़ .sql फाइलों में साफ दिखती हैं, ORM के तरीकों में छिपी नहीं होतीं।
sqlc उन प्रोजेक्ट्स के लिए आदर्श है जहाँ परफॉर्मेंस और क्वेरी कंट्रोल ज़रूरी है: हाई-लोड API, फाइनेंशियल सिस्टम, एनालिटिक्स प्लेटफॉर्म। यह माइग्रेशन (जैसे golang-migrate) के साथ भी बढ़िया काम करता है और किसी खास डेटाबेस से बंधा नहीं है — PostgreSQL, MySQL, SQLite सपोर्ट करता है।
इंस्टॉलेशन
sqlc एक लाइब्रेरी नहीं, बल्कि कमांड-लाइन टूल है। इसे कई तरीकों से इंस्टॉल किया जा सकता है:
# go install के ज़रिए (सुझाव)
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
# Homebrew से (macOS/Linux)
brew install sqlc
# GitHub से बाइनरी डाउनलोड करें
# https://github.com/sqlc-dev/sqlc/releases
इंस्टॉल करने के बाद वर्जन चेक करें:
sqlc version
त्वरित शुरुआत
एक मिनिमल प्रोजेक्ट बनाते हैं जो sqlc का काम दिखाएगा।
1. प्रोजेक्ट स्ट्रक्चर
mkdir sqlc-demo && cd sqlc-demo
go mod init sqlc-demo
2. sqlc कॉन्फ़िगरेशन
प्रोजेक्ट की रूट में sqlc.yaml फाइल बनाएं:
version: "2"
sql:
- engine: "postgresql"
queries: "queries.sql"
schema: "schema.sql"
gen:
go:
package: "db"
out: "db"
sql_package: "pgx/v5"
3. डेटाबेस स्कीमा
schema.sql फाइल:
CREATE TABLE authors (
id BIGSERIAL PRIMARY KEY,
name text NOT NULL,
bio text
);
4. SQL क्वेरीज़
queries.sql फाइल:
-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1;
-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name;
-- name: CreateAuthor :one
INSERT INTO authors (name, bio)
VALUES ($1, $2)
RETURNING *;
-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = $1;
5. कोड जनरेशन
sqlc generate
इसे चलाने के बाद db/ फोल्डर में जनरेटेड फाइलें दिखेंगी। अब इन्हें कोड में इस्तेमाल करें:
package main
import (
"context"
"fmt"
"log"
"github.com/jackc/pgx/v5/pgxpool"
"sqlc-demo/db"
)
func main() {
ctx := context.Background()
pool, err := pgxpool.New(ctx, "postgres://user:pass@localhost:5432/testdb")
if err != nil {
log.Fatal(err)
}
defer pool.Close()
queries := db.New(pool)
// लेखक बनाएँ
author, err := queries.CreateAuthor(ctx, db.CreateAuthorParams{
Name: "Brian Kernighan",
Bio: "Co-author of The C Programming Language",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("लेखक बनाया: %+v\n", author)
// ID से लेखक प्राप्त करें
fetched, err := queries.GetAuthor(ctx, author.ID)
if err != nil {
log.Fatal(err)
}
fmt.Printf("लेखक मिला: %+v\n", fetched)
}