Tutorial golang ke 40 yang membahas mengenai cara membuat REST API dengan Golang dan Database MySQL dimana kita akan membuat CRUD (Create, Read, Update dan Delete). Kita mulai dari cara menghubungakan program Golang dengan database MySQL.
Membuat REST API dengan Database MySQL
Sebelum melanjutkan saya akan berikan beberapa hal yang perlu di pelajari sebelum nya yaitu :
- Belajar Golang #19 : Memahami Penggunaan Struct / Structures
- Belajar Golang #37 : Menjalankan HTTP Server – WEB
- Belajar Golang #38 : Membuat API Sederhana dengan tipe JSON
Apabila anda belum belajar 3 materi di atas maka saya sarankan mempelajari terlebih dahulu agar lebih mudah memahami tutorial belajar golang kali ini.
Yuk kita mulai dari persiapan projek terlebih dahulu.
Struktur Projek
Silahkan buat folder dan file dengan struktur folder sederhana seperti di bawah ini :
1 2 3 4 5 6 7 8 9 10 | . ├── config │ └── config.go ├── mahasiswa │ └── repository_mysql.go ├── main.go ├── models │ └── mahasiswa.go └── utils └── res.go |
Penjelasan :
- main.go, digunakan untuk menjalankan melakukan aksi terhadap data, bisa di katakan sebuah controller.
- utils/res.go, digunakan untuk mencetak data dengan format JSON.
- config/config.go, digunakan untuk melakukan konfigurasi MySQL.
- mahasiswa/repository_mysql.go, digunakan untuk melakukan query ke database.
- models/mahasiswa.go, digunakan untuk membuat struct/ struktur.
Perlu di ketahui saya membuat projek ini di folder /home/didik/Workspace/go_path/src/github.com/kodingin/api-mysql
. Nama di rektorinya adalah api-mysql
.
Kenapa saya kasih tahu ke anda ?
Karena ketika melakukan import dari file lain harus melakukan import dari GOPATH nya yang ada di dalam di rektori src
.
Silahkan sesuaikan di lokal PC anda.
Sekarang kita isikan kode di fungsi main.go.
Hal yang pertama kita lakukan yaitu membuat http server
agar dapat di jalankan di browser.
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package main import ( "log" "net/http" ) func main() { err := http.ListenAndServe(":7000", nil) if err != nil { log.Fatal(err) } } |
Jika di jalankan kode di atas belum menghasilkan apa-apa karena tidak ada http handler
yang di panggil.
Lalu kita isikan file utils/res.go
.
utils/res.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package utils import ( "encoding/json" "net/http" ) func ResponseJSON(w http.ResponseWriter, p interface{}, status int) { ubahkeByte, err := json.Marshal(p) w.Header().Set("Content-Type", "application/json") if err != nil { http.Error(w, "error om", http.StatusBadRequest) } w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) w.Write([]byte(ubahkeByte)) } |
Kode di atas berguna untuk menampilkan data dengan bentuk JSON di browser. Fungsi di atas nantinya akan kita panggil dari file main.go.
Sekarang kita buat modelnya, silahkan buka models/mahasiswa.go
.
models/mahasiswa.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package models import ( "time" ) type ( // Mahasiswa Mahasiswa struct { ID int `json:"id"` NIM int `json:"nim"` Name string `name:"name"` Semester int `json:"semester"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } ) |
Kode di atas merupakan struct
, dimana nanti di gunakan untuk melakukan segala bentuk manipulasi data, seperti menampilkan data dengan golang dengan database MySQL
.
Jika sudah sekarang kita akan melakukan koneksi ke database MySQL.
Koneksi Golang ke Database MySQL
Sebelumnya silahkan buat database dengan nama akademik
. Dan nama tabel mahasiswa
.
Berikut ini query sql nya yang bisa anda excute.
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE TABLE `mahasiswa` ( `id` Int( 8 ) AUTO_INCREMENT NOT NULL, `nim` BigInt( 14 ) NOT NULL, `name` VarChar( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `semester` VarChar( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `created_at` DateTime NOT NULL, `updated_at` DateTime NOT NULL, CONSTRAINT `unique_id` UNIQUE( `id` ) ) CHARACTER SET = utf8 COLLATE = utf8_general_ci ENGINE = InnoDB AUTO_INCREMENT = 3; |
Sehingga skema tabel mahasiswa
seperti gambar di bawah ini.

Pastikan skema database dengan tabel mahasiswa
sudah sama.
Sekarang kita lakukan koneksi ke database MySQL, untuk menghubungkan Golang dengan MySQL kita harus menginstall package nya dulu.
Ada banyak pilihan, namun pada tutorial ini kita akan menggunakan yang sering banyak digunakan yaitu https://github.com/go-sql-driver/mysql.
Silahkan install package di atas dengan mengetikkan perintah di bawah ini di command line.
1 | go get -u github.com/go-sql-driver/mysql |
Jika sudah, sekarang mari kita buat kode nya. Untuk melakukan koneksi dengan database MySQL kita menggunakan file config/config.go
.
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package config import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) const ( username string = "root" password string = "inipassword" database string = "akademik" ) var ( dsn = fmt.Sprintf("%v:%v@/%v", username, password, database) ) // HubToMySQL func MySQL() (*sql.DB, error) { db, err := sql.Open("mysql", dsn) if err != nil { return nil, err } return db, nil } |
Silahkan ganti pengaturan koneksi ke databasenya sesuai dengan environment
milik anda yang terdapat pada kode :
1 2 3 4 5 | const ( username string = "root" password string = "inipassword" database string = "akademik" ) |
Sekarang mari kita lihat hasilnya. Apakah sudah berhasil atau belum.
Silahkan panggil fungsi MySQL()
dari file main dan fungsi main
.
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package main import ( "log" "net/http" "github.com/kodingin/api-mysql/config" "fmt" ) func main() { db, e := config.MySQL() if e != nil { log.Fatal(e) } eb := db.Ping() if eb != nil { panic(eb.Error()) } fmt.Println("Success") err := http.ListenAndServe(":7000", nil) if err != nil { log.Fatal(err) } } |
Perhatikan kode di atas pada bagian isi dari import, terdapat kode : "github.com/kodingin/api-mysql/config"
. Nah kode tersebut bisa anda sesuaikan dengan folder anda.
Sebagai contoh anda membuat di folder GOPATH/src/github.com/iniaku/api-mysql
maka ubah menjadi :
1 | github.com/iniaku/kodingin/api-mysql/config |
Ingaet pemanggilan file lain mulai dari folder di dalam src
.
Sekarang mari kita coba jalankan
go run main.go

Jika hasilnya seperti gambar di atas maka koneksi ke database MySQL berhasil.
Berikut ini saya sengaja salahkan konfigurasinya, dan lihat apa yang terjadi.

Jika hasil nya seperti gambar di atas, maka konfigurasi ke database mysql nya gagal dengan alasan environment
tidak sesuai. Solusinya silahkan perbaiki lagi di config/config.go
.
Selanjutnya ngapain ?
Silahkan lanjut ke tutorial Golang MySQL berikutnya yang membahas :
Oke, sekian tutorial cara koneksi Golang ke Database MySQL. Silahkan di tunggu kelanjutannya tutorial membuat RESTFull API dengan Golang dan database MySQL nya. Terima kasih sahabat kodingin.com.