Menggunakan MYSQL pada GOLANG
Ketika belajar Golang, hampir tidak dapat dihindari bahwa harus berinteraksi dengan beberapa bentuk basis data (database).
Dalam tutorial ini saya akan menunjukkan bagaimana dapat terhubung ke database MySQL dan melakukan pernyataan SQL dasar menggunakan Go.
pertama akan di mulai dengan menyambungkan ke database yang telah disiapkan di localhost dan kemudian melakukan beberapa insert dan select query.
Untuk melakukan ini, saya akan menggunakan https://github.com/go-sql-driver/mysql sebagai driver MySQL. Go-SQL-Driver adalah driver MySQL yang ringan dan cepat yang mendukung koneksi melalui TCP / IPv4, TCP / IPv6, soket domain Unix atau protokol khusus dan memiliki fitur handling untuk broken connections.
Mari kita buat file main.go baru. Dengan ini, kami akan meng-impor beberapa paket dan menyiapkan koneksi sederhana ke database. Untuk tujuan tutorial ini, saya telah memulai MySQL menggunakan phpmyadmin dan saya telah membuat database yang disebut tes untuk terhubung dan membuat tabel di dalamnya.
Saya akan menggunakan sql.Open untuk terhubung ke database dan menyiapkan koneksi, ini akan mengembalikan db atau error yang akan bisa ditangani.
package main
import (
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
fmt.Println("Golang dengan MySQL")
// Open database connection
// The database is called test
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/test")
// if there is an error opening the connection, handle it
if err != nil {
panic(err.Error())
}
// defer the close till after the main function has finished
// executing
defer db.Close()
}
Melakukan Perintah SQL Dasar
Jadi, sekarang telah membuat koneksi, harus mulai mengirimkan query ke database.
Untungnya, db.Query (sql) memungkinkan kita untuk melakukan perintah SQL yang kita inginkan. Kami hanya bisa membuat string queri dan mengirimkannya sebagai parameter.
package main
import (
"fmt"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
fmt.Println("Golang dengan MySQL")
// Open database connection
// The database is called test
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/test")
// if there is an error opening the connection, handle it
if err != nil {
panic(err.Error())
}
// defer the close till after the main function has finished
// executing
defer db.Close()
// perform a db.Query insert
insert, err := db.Query("INSERT INTO test VALUES ( 2, 'TEST' )")
// if there is an error inserting, handle it
if err != nil {
panic(err.Error())
}
// be careful deferring Queries if you are using transactions
defer insert.Close()
}
Mempopulasikan Structs dari Query
Mengambil queri hasil dari database, tetapi kita harus dapat membaca hasil ini atau mengisi structs yang ada sehingga kita dapat menguraikannya dan memodifikasinya dengan mudah. Untuk menguraikan sejumlah baris, kita dapat menggunakan metode .Scan (args …) yang mengambil sejumlah argumen dan memungkinkan kita untuk mengisi objek.
/*
* Tag... - a very simple struct
*/
type Tag struct {
ID int `json:"id"`
Name string `json:"name"`
}func main() {
// Open up our database connection.
db, err := sql.Open("mysql", "root:pass1@tcp(127.0.0.1:3306)/test")
// if there is an error opening the connection, handle it
if err != nil {
log.Print(err.Error())
}
defer db.Close()
// Execute the query
results, err := db.Query("SELECT id, name FROM tags")
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
for results.Next() {
var tag Tag
// for each row, scan the result into our tag composite object
err = results.Scan(&tag.ID, &tag.Name)
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
// and then print out the tag's Name attribute
log.Printf(tag.Name)
}
}
Dalam contoh ini kami mengambil 2 kolom dari basis data tag dan kemudian menggunakan .Scan untuk mengisi objek tag kami.
Note —Jika Anda mengambil 3 data dari database dan .Scan hanya memiliki 2 parameter, itu akan error. Harus benar-benar cocok.
Query Single Row
Katakanlah ingin satu baris data saat ini dan memiliki ID dan ingin mengisi struct. Kita bisa melakukan itu seperti ini:
var tag Tag
// Execute the query
err = db.QueryRow("SELECT id, name FROM tags where id = ?", 2).Scan(&tag.ID, &tag.Name)
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
log.Println(tag.ID)
log.Println(tag.Name)
Conclusion
Dalam tutorial ini, kami berhasil mengatur koneksi ke MySQL dan kemudian melakukan beberapa pertanyaan sederhana ke database itu dan menyusun tanggapan yang dikembalikan ke dalam sebuah struct atau array dari struct. Mudah-mudahan ini akan memberi Anda semua yang Anda butuhkan untuk mengambil langkah lebih lanjut dan membangun aplikasi Go Anda sendiri di atas MySQL.