0Pricing
Go Academy · Pelajaran

Membuka Koneksi

Sambungkan ke database

Membuka Koneksi adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Paket database/sql

Paket standar Go database/sql menyediakan API generik yang tidak bergantung pada jenis basis data. Anda memasangkannya dengan pengandar untuk basis data tertentu, seperti PostgreSQL atau MySQL.

  • Satu API untuk banyak basis data
  • Pengumpulan koneksi bawaan
  • Kueri berparameter yang aman

Mengimpor Pengandar

Pengandar mendaftarkan dirinya melalui impor kosong. Garis bawah berarti Anda mengimpornya hanya untuk efek sampingnya, yaitu pendaftaran, bukan untuk memanggilnya secara langsung.

import (
    "database/sql"
    _ "github.com/lib/pq"
)

sql.Open

sql.Open menerima nama pengandar dan nama sumber data (DSN). Fungsi ini belum benar-benar terhubung; fungsi ini hanya menyiapkan kumpulan koneksi.

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil {
    log.Fatal(err)
}

db Adalah Kumpulan Koneksi

*sql.DB yang dikembalikan bukan satu koneksi, melainkan kumpulan koneksi yang aman digunakan secara bersamaan oleh banyak goroutine. Buka sekali, lalu bagikan ke seluruh aplikasi Anda.

Memverifikasi dengan Ping

Karena Open menunda koneksi, gunakan Ping untuk benar-benar membuat koneksi dan memastikan basis data dapat dijangkau serta kredensialnya valid.

if err := db.Ping(); err != nil {
    log.Fatal("cannot reach db:", err)
}

Menutup Kumpulan Koneksi

Gunakan defer pada db.Close() di fungsi main atau fungsi penyiapan Anda. Anda hampir tidak pernah menutup koneksi per kueri, melainkan hanya saat seluruh aplikasi dimatikan.

defer db.Close()

Penyetelan Kumpulan Koneksi

Atur kumpulan koneksi dengan SetMaxOpenConns, SetMaxIdleConns, dan SetConnMaxLifetime. Pengaturan ini mencegah basis data kehabisan sumber daya dan mengganti koneksi yang sudah tidak lagi baik.

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(5 * time.Minute)

Contoh Dalam Memori yang Dapat Dijalankan

Pengandar nyata memerlukan basis data melalui jaringan, jadi contoh yang dapat dijalankan ini menunjukkan siklus hidup yang sama dengan simulasi pembukaan dan ping, hanya menggunakan tipe dari pustaka standar.

package main

import (
    "errors"
    "fmt"
)

type DB struct{ dsn string }

func Open(driver, dsn string) (*DB, error) {
    if dsn == "" {
        return nil, errors.New("empty dsn")
    }
    return &DB{dsn: dsn}, nil
}

func (db *DB) Ping() error { return nil }
func (db *DB) Close() error { return nil }

func main() {
    db, err := Open("postgres", "postgres://localhost/mydb")
    if err != nil {
        fmt.Println("open error:", err)
        return
    }
    defer db.Close()
    if err := db.Ping(); err != nil {
        fmt.Println("ping error:", err)
        return
    }
    fmt.Println("connected to", db.dsn)
}

Varian yang Sadar Context

Utamakan PingContext, QueryContext, dan ExecContext agar pemanggilan mematuhi tenggat waktu dan pembatalan. Meneruskan context membatasi berapa lama pemanggilan basis data yang macet dapat memblokir.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err := db.PingContext(ctx)

Format DSN

Setiap pengandar menentukan DSN-nya sendiri. PostgreSQL menerima URL, sedangkan MySQL menggunakan user:pass@tcp(host:3306)/dbname. Selalu periksa dokumentasi pengandar dan hindari menulis kredensial secara langsung di dalam kode.

Satu Kumpulan Koneksi untuk Jangka Panjang

Kesalahan umum adalah memanggil sql.Open untuk setiap permintaan. Hal itu menggagalkan pengumpulan koneksi dan menghabiskan koneksi. Buka sekali saat memulai aplikasi, simpan *sql.DB, lalu gunakan kembali di mana saja.

Pemeriksaan Singkat

Uji pemahaman Anda tentang koneksi.

Ringkasan

Anda telah mempelajari cara membuka koneksi:

  • Impor pengandar secara kosong, lalu panggil sql.Open dengan pengandar dan DSN
  • *sql.DB adalah kumpulan koneksi yang aman untuk konkurensi dan dibuka sekali
  • Ping memverifikasi konektivitas nyata
  • Sesuaikan kumpulan koneksi dan gunakan metode yang sadar context
  • Gunakan defer db.Close() saat aplikasi dimatikan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuka Koneksi” gratis?

Ya — teks lengkap “Membuka Koneksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuka Koneksi”?

Sambungkan ke database Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Membuka Koneksi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membuka Koneksi
  2. Mengeksekusi Kueri Baris
  3. Pernyataan Terlebih Dahulu
  4. Transaksi
← Kembali ke Go Academy