Dengan Go, kita dapat menggunakan beragam basis-data ke dalam aplikasi kita.
Topik-topik dalam bab ini menjelaskan bagaimana menggunakan paket
database/sql
dari pustaka baku untuk mengakses basis-data relasional.
Sebagai tutorial pengenalan untuk akses data dengan Go, silahkan lihat Tutorial: Mengakses basis-data relasional.
Go mendukung teknologi-teknologi akses data lain juga, termasuk pustaka-pustaka Object Relational-Mapping (ORM) untuk akses tingkat-tinggi terhadap basis-data relasional, dan juga penyimpanan data non-relasional NoSQL.
-
Pustaka-pustaka ORM. Bila paket
database/sqlmengikutkan fungsi-fungsi akses data tingkat-rendah, Anda juga dapat memakai Go untuk mengakses penyimpanan data dengan abstraksi tingkat-tinggi. Untuk info lebih lanjut tentang pustaka ORM yang terkenal pada Go, lihat GORM (referensi paket). dan ent (referensi paket). -
Penyimpanan data NoSQL. Komunitas Go telah mengembangkan driver untuk mayoritas basis-data NoSQL, termasuk MongoDB dan Couchbase. Anda bisa mencari di pkg.go.dev untuk driver-driver NoSQL lainnya.
Sistem manajemen basis-data yang didukung
Go mendukung hampir semua sistem manajemen basis-data relasional yang umum, termasuk MySQL, Oracle, PostgreSQL, SQL Server, SQLite, dan banyak lagi.
Anda bisa menemukan daftar lengkap dari driver tersebut di halaman SQLDrivers.
Fungsi untuk eksekusi kueri dan mengubah data
Paket database/sql berisi fungsi-fungsi yang dirancang secara khusus untuk
operasi basis-data.
Misalnya, fungsi Query dan QueryRow dapat digunakan untuk mengesekusi
kueri, QueryRow dirancang untuk kasus dimana Anda mengharapkan kembalian
satu baris saja.
Anda dapat menggunakan fungsi Exec untuk membuat perubahan data dengan
perintah SQL seperti INSERT, UPDATE, atau DELETE.
Lebih lanjut, lihat bagian berikut:
Transaksi
Lewat sql.Tx, kita dapat menulis kode untuk mengeksekusi operasi
basis-data dalam sebuah transaksi.
Di dalam sebuah transaksi, banyak operasi dapat dilakukan bersamaan dan
diakhiri dengan sebuah commit, untuk menyimpan semua perubahan secara
atomic, atau sebuah rollback, untuk mengabaikan semua.
Lebih lanjut tentang transaksi, lihat Mengeksekusi transaksi.
Pembatalan kueri
Kita dapat menggunakan context.Context jika kita menginginkan supaya
operasi basis-data dapat dibatalkan, seperti saat koneksi dari klien
terputus atau operasi berjalan terlalu lama dari yang kita inginkan.
Untuk setiap operasi basis-data, kita dapat gunakan fungsi dari paket
database/sql yang menerima Context sebagai argumen.
Dengan Context, kita dapat menentukan tenggat waktu operasi.
Kita juga dapat menggunakan Context untuk menyebarkan permintaan
pembatalan dari aplikasi ke fungsi yang mengeksekusi perintah SQL,
memastikan bahwa sumber yang terpakai dibebaskan bila tidak dibutuhkan lagi.
Lebih lanjut, lihat Pembatalan operasi
Mengatur pool koneksi
Saat menggunakan sql.DB, kita terhubung dengan pool koneksi bawaan yang
membuat dan menutup koneksi berdasarkan kebutuhan kode.
Penggunaan sql.DB adalah cara paling umum untuk mengakses basis-data pada
Go.
Lebih lanjut, lihat
Membuat koneksi basis-data.
Paket database/sql mengatur pool koneksi untuk Anda.
Namun, untuk kebutuhan tingkat lanjut, Anda dapat mengatur pool koneksi
seperti yang dijelaskan dalam
Mengatur
properti pool koneksi.
Untuk operasi-operasi yang mana Anda membutuhkan satu koneksi,
paket database/sql menyediakan
sql.Conn
Conn sangat berguna bila sebuah transaksi dengan sql.Tx bukan pilihan
yang tepat.
Sebagai contoh, kode Anda bisa saja butuh:
-
Membuat perubahan skema lewat Data-Definition Language (DDL), mengikutkan logika yang berisi semantik transaksi sendiri. Mencampurkan fungsi transaksi paket
sqldengan perintah transaksi SQL adalah praktik yang tidak bagus, seperti yang dijelaskan dalam Mengeksekusi transaksi. -
Melakukan operasi yang mengunci kueri yang membuat tabel-tabel sementara.
Lebih lanjut, lihat Menggunakan koneksi tunggal.