Go Academy · Pelajaran

Membuka Sambungan

Sambung ke pangkalan data

Pelajaran 1 daripada 413 langkah

Membuka Sambungan ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Pakej database/sql

Pakej standard Go database/sql menyediakan API generik yang tidak bergantung pada pangkalan data tertentu. Anda memadankannya dengan pemacu untuk pangkalan data khusus Anda, seperti PostgreSQL atau MySQL.

  • Satu API untuk banyak pangkalan data
  • Pengumpulan sambungan terbina dalam
  • Pertanyaan berparameter yang selamat

Mengimport Pemacu

Pemacu mendaftarkan dirinya melalui import kosong. Garis bawah bermaksud Anda mengimportnya hanya untuk kesan sampingannya, iaitu pendaftaran, bukan untuk memanggilnya secara langsung.

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

sql.Open

sql.Open menerima nama pemacu dan nama sumber data (DSN). Ia belum membuat sambungan sebenar; ia hanya menyediakan kumpulan sambungan.

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

db Ialah Kumpulan Sambungan

*sql.DB yang dikembalikan bukan satu sambungan, sebaliknya kumpulan sambungan yang selamat digunakan secara serentak oleh banyak goroutin. Buka sekali dan kongsikannya di seluruh aplikasi Anda.

Sahkan dengan Ping

Oleh sebab Open bersifat malas, gunakan Ping untuk benar-benar mewujudkan sambungan serta mengesahkan bahawa pangkalan data boleh dicapai dan kelayakan adalah sah.

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

Menutup Kumpulan Sambungan

Tangguhkan db.Close() dalam fungsi main atau persediaan Anda. Anda jarang menutup sambungan bagi setiap pertanyaan; lakukan hanya apabila seluruh aplikasi dimatikan.

defer db.Close()

Pelarasan Kumpulan Sambungan

Kawal kumpulan sambungan dengan SetMaxOpenConns, SetMaxIdleConns dan SetConnMaxLifetime. Tetapan ini mengelakkan pangkalan data kehabisan sambungan dan mengitar semula sambungan yang telah lapuk.

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

Contoh Dalam Memori yang Boleh Dijalankan

Pemacu sebenar memerlukan pangkalan data rangkaian, jadi contoh yang boleh dijalankan ini menunjukkan kitar hayat yang sama dengan simulasi pembukaan dan ping menggunakan jenis daripada pustaka standard sahaja.

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 Berasaskan Konteks

Utamakan PingContext, QueryContext dan ExecContext supaya panggilan mematuhi tarikh akhir dan pembatalan. Penghantaran konteks mengehadkan tempoh panggilan pangkalan data yang tergantung boleh menyekat pelaksanaan.

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

Format DSN

Setiap pemacu mentakrifkan DSN sendiri. PostgreSQL menerima URL, manakala MySQL menggunakan user:pass@tcp(host:3306)/dbname. Sentiasa semak dokumentasi pemacu dan elakkan mengekodkan kelayakan secara terus.

Satu Kumpulan, Berjangka Hayat Panjang

Kesilapan biasa ialah memanggil sql.Open bagi setiap permintaan. Tindakan ini menggagalkan pengumpulan sambungan dan menghabiskan sambungan. Buka sekali semasa permulaan, simpan *sql.DB dan gunakannya semula di mana-mana.

Semakan Pantas

Uji pengetahuan Anda tentang sambungan.

Ringkasan

Anda telah mempelajari cara membuka sambungan:

  • Import kosongkan pemacu, kemudian panggil sql.Open dengan pemacu dan DSN
  • *sql.DB ialah kumpulan sambungan yang selamat untuk keserentakan dan dibuka sekali
  • Ping mengesahkan sambungan sebenar
  • Laraskan kumpulan sambungan dan gunakan kaedah yang menyedari konteks
  • defer db.Close() semasa penutupan
Percuma untuk bermula

Pelajari Go dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Membuka Sambungan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Membuka Sambungan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Membuka Sambungan”?

Sambung ke pangkalan data Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Go Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Membuka Sambungan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membuka Sambungan
  2. Membuat Pertanyaan Baris
  3. Pernyataan Disediakan
  4. Transaksi
← Kembali ke Go Academy