Go Programlama Dili (Golang) ile aklınıza gelebilecek hemen her projeyi hayata geçirebilirsiniz. Projelerin türüne göre kullanılan teknolojiler değişmektedir ancak veritabanlarının birçok projede yaygın olarak kullanıldığını söyleyebiliriz. İşte bu nedenle Golang ile veritabanı (mysql) kullanımını basit örnekler ve kodlarla anlatmak istedim. Eğer Go dili ile kodlamaya başlamak için gerekli çalışma ortamını hazırladıysanız haydi başlayalım.
Github Sayfası ve Örnek Kodlar
Bu yazıda anlatılan tüm kodlar ve veritabanı şemasına projenin Github sayfasından ulaşabilirsiniz.
MySQL Driver Kurulumu ve Pakete Eklenmesi
Go Programlama Dili‘nde kullanacağınız veritabanına göre ilgili driver’ı kurmanız gerekmektedir. Bu yazımızda anlatacağım MySQL kullanımı için gerekli MySQL driver‘ını aşağıdaki komut ile kullanabiliriz.
go get -u github.com/go-sql-driver/mysql
Yükleme işlemi tamamlandıktan sonra projemizde veritabanı kullanımı için şu iki kütüphaneyi aşağıdaki şekilde projeye dahil etmeliyiz.
package ... import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) ...
Örnek Veritabanı ve Tablonun Oluşturulması
Bu mini projemizde örnek bir veritabanı ve tablo kullanacağız. Bunun için öncelikle bir çalışma ortamınızda bir veritabanı oluşturmalısınız. Ben “godb” isimli bir veritabanı oluşturdum. Tablo olarak da aşağıdaki SQL sorgusunu, kullanacağınız veritabanında çalıştırabilirsiniz.
DROP TABLE IF EXISTS `posts`; CREATE TABLE `posts` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL, `body` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `posts` (`id`, `title`, `body`) VALUES (1,'Hello World','The content of the hello world'), (2,'Hello Second World','The content of the hello second world');
Veritabanı (MySQL) Bağlantısının Yapılması
Gerekli paketlerin dâhil edilmesi ve örnek veritabanı ile tablonun kurulmasının ardından yapmamız gereken ilk şey veritabanına bağlantı kurmak. Bunun için golang dosyamızda aşağıdaki methodu kullanabiliriz. Elbette buradaki veritabanı ismi, kullanıcı adı ve parola gibi hususları kendi çalışma ortamınıza göre değiştirmelisiniz.
... func dbConn() (db *sql.DB) { dbDriver := "mysql" dbUser := "root" dbPass := "root" dbName := "godb" db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) if err != nil { panic(err.Error()) } return db } ...
Tabloya Uygun Struct Yapısının Oluşturulması
Go Programlama Dili yani Golang‘de veritabanından veriyi çekerken, bu veriye uygun bir struct oluşturmalısınız. Bizim projemizdeki Posts tablosuna uygun struct yapısı şu şekildedir.
... type Post struct { Id int Title string Body string } ...
Bu aşamaya kadar yaptıklarımızı hazırlık olarak değerlendirebiliriz. Bundan sonra veritabanı ile istediğimiz gibi çalışabiliriz.
Tüm Kayıtların Çekilerek Listelenmesi
func getAll() { db := dbConn() selDB, err := db.Query("SELECT * FROM Posts ORDER BY id DESC") if err != nil { panic(err.Error()) } post := Post{} posts := []Post{} for selDB.Next() { var id int var title, body string err = selDB.Scan(&id, &title, &body) if err != nil { panic(err.Error()) } post.Id = id post.Title = title post.Body = body posts = append(posts, post) } for _, post := range posts { fmt.Println(post.Title) } defer db.Close() }
Tek Kaydın Çekilerek Gösterilmesi
func getOne(postId int) { db := dbConn() selDB, err := db.Query("SELECT * FROM Posts WHERE id=?", postId) if err != nil { panic(err.Error()) } post := Post{} for selDB.Next() { var id int var title, body string err = selDB.Scan(&id, &title, &body) if err != nil { panic(err.Error()) } post.Id = id post.Title = title post.Body = body } fmt.Println("Post Title : " + post.Title) fmt.Println("Post Body : " + post.Body) defer db.Close() }
Yeni Kayıt Eklenmesi
func add() { db := dbConn() title := "Hello Second World" body := "The content of the hello second world" insertQuery, err := db.Prepare("INSERT INTO Posts(title, body) VALUES(?,?)") if err != nil { panic(err.Error()) } insertQuery.Exec(title, body) fmt.Println("ADDED: Title: " + title + " | Body: " + body) defer db.Close() }
Mevcut Kaydın Güncellenmesi
func update(postId int) { db := dbConn() title := "Hello 1 World" body := "The content of the hello 1 world" updateQuery, err := db.Prepare("UPDATE Posts SET title=?, body=? WHERE id=?") if err != nil { panic(err.Error()) } updateQuery.Exec(title, body, postId) fmt.Println("UPDATED: Title: " + title + " | Body: " + body) defer db.Close() }
Herhangi Bir Kaydın Silinmesi
func delete(postId int) { db := dbConn() deleteQuery, err := db.Prepare("DELETE FROM Posts WHERE id=?") if err != nil { panic(err.Error()) } deleteQuery.Exec(postId) fmt.Println("DELETED") defer db.Close() }
Main Methodu
Dosyamızda yukarıdaki methodları çalıştırmak için şöyle bir main methodu kullanabiliriz.
func main() { add() update(1) delete(1) getOne(1) getAll() }
Son Sözler
Bu projede temel seviyede programlama bilgisine sahip olanlara hitap edecek şekilde Golang ile veritabanı işlemlerini anlatmaya çalıştım. Tekrar etmem gerekirse yukarıda anlattığım kodların derli toplu ve çalışır haline projenin Github sayfasından ulaşabilirsiniz. İyi çalışmalar dilerim.