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/sql mengikutkan 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 sql dengan 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.