database/sql ja ajurit
Tietokannan määritys, QueryRow, Scan ja yhteyspoolit
database/sql ja ajurit on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.
database/sql:n yleiskatsaus
database/sql on Gon standardoitu tietokantojen abstraktiokerros. Se hallitsee yhteyspoolia ja toimii minkä tahansa tietokannan kanssa ajurilaajennuksen avulla.
Ajurin rekisteröiminen
Tuokaa ajuripaketti sen sivuvaikutusten eli ajurin rekisteröinnin vuoksi. Avatkaa sitten yhteys:
import _ "github.com/lib/pq" // PostgreSQL driver
db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()sql.Open ja db.Ping
sql.Open ei muodosta yhteyttä, vaan tarkistaa DSN:n. Kutsukaa db.Ping()- tai db.PingContext(ctx)-funktiota varmistaaksenne, että yhteys on käytettävissä.
if err := db.Ping(); err != nil { log.Fatal(err) }Rivien kysely
Käyttäkää db.QueryContext-funktiota SELECT-kyselyn suorittamiseen ja rivien lukemiseen:
rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
var id int; var name string
rows.Scan(&id, &name)
}Yhden rivin kysely
db.QueryRowContext palauttaa *Row-arvon kyselyille, joiden odotetaan palauttavan enintään yhden tuloksen:
var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }Muutosoperaatioiden suorittaminen
Käyttäkää db.ExecContext-funktiota INSERT-, UPDATE- ja DELETE-kyselyihin. Se palauttaa Result-arvon, joka sisältää muutettujen rivien määrän ja viimeksi lisätyn tunnuksen.
result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()Valmistellut lauseet
Valmistelkaa lause kerran ja suorittakaa se tehokkaasti useita kertoja:
stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
row := stmt.QueryRowContext(ctx, email)
}Yhteyspoolin asetukset
Määrittäkää poolin asetukset tuotantokäyttöä varten:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)rows.Err()-virheen tarkistaminen
Tarkistakaa rivien käsittelysilmukan jälkeen aina rows.Err() — silmukka on voinut päättyä ennenaikaisesti verkkovirheen vuoksi.
if err := rows.Err(); err != nil { return err }NULL-arvot
Käyttäkää sql.NullString-, sql.NullInt64- ja muita vastaavia tyyppejä tietokannan NULL-arvojen käsittelyyn. Muuten skannaus suoraan ei-osoitintyyppiseen Go-tyyppiin voi aiheuttaa paniikin.
var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }Ajuriluettelo
Suosittuja ajureita ovat github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL) ja modernc.org/sqlite (SQLite, puhdas Go).
Pikatarkistus
Miksi rows.Close() on aina kutsuttava ja rows.Err() tarkistettava kyselyn jälkeen?
Kertaus: database/sql
Tärkeimmät kohdat:
- Tuokaa ajuri alaviivalla _ sivuvaikutusten vuoksi; käyttäkää sql.Open-funktiota ja Pingiä
- QueryContext → rows.Next + Scan + rows.Close + rows.Err
- Käyttäkää ExecContext-funktiota muutosoperaatioihin ja QueryRowContext-funktiota yksittäisille riveille
- Määrittäkää poolin asetukset SetMaxOpenConns-, SetMaxIdleConns- ja SetConnMaxLifetime-funktioilla
Opi Go tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”database/sql ja ajurit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “database/sql ja ajurit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”database/sql ja ajurit”?
Tietokannan määritys, QueryRow, Scan ja yhteyspoolit Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”database/sql ja ajurit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?
Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- database/sql ja ajurit
- sqlx: struct-skannaus ja nimetyt kyselyt
- pgx: tehokas PostgreSQL-ajuri
- Transaktiot ja migraatiot