Pada artikel sebelumnya kita telah mengintegrasikan django framework dan sentry.io, sentry.io juga mendukung banyak bahasa program termasuk bahasa Go. Midleware yang akan kita gunakan untuk terintegrasi dengan sentry.io yaitu RAVEN.
Sekarang mari kita menuju pada pokok bahasan tentang apa saja yang bisa dilakukan sentry di bahas Go ?
func bar() int {
var luckyNumber []int
return luckyNumber[42]
}func foo() int {
return bar()
}func main() {
// Initialize Sentry heredefer sentry.Flush(time.Second * 5)
defer sentry.Recover()foo()
}
Secara default, sentry-go menggunakan transport asinkron, yang membutuhkan sinyal eksplisit untuk penyelesaian pengiriman event menggunakan metode sentry.Flush. Jika tidak, program tidak akan menunggu panggilan HTTP async untuk mengembalikan respons dan segera keluar dari proses ketika mencapai akhir fungsi utama, sentry.Flush tidak diperlukan di dalam goroutine yang berjalan.
Pastikan sebelumnya kamu sudah memilki account dan membuat sample project di sentry.io, jika belum lakukan registrasi terlebih dahulu. Di tutorial kali ini kita akan membuat sebuah sample project untuk melihat data user pada database mysql. Sebelum kita memulai, mari kita buat terlebih dahulu struktur project impian kita, perhatikan gambar di bawah ini :
library apa saja yang perlu kita siapkan ?
package sentrylogimport (
"fmt"
"log"
"os""github.com/getsentry/raven-go"
)type Logging struct {
Log *log.Logger
}func New(logger *log.Logger) *Logging {
return new(Logging).init(logger)
}func (l *Logging) init(logger *log.Logger) *Logging {
l.Log = logger
raven.SetDSN(os.Getenv("SENTRY_DSN"))
return l
}// Info log info
func (l *Logging) Info(req ...interface{}) {
fmt.Println(req...)
}// Error log info
func (l *Logging) Error(req ...interface{}) {
err := fmt.Errorf(fmt.Sprintf("%v", req))
raven.CaptureErrorAndWait(err, nil)
fmt.Println(req...)
return
}func (l *Logging) ErrorWithExtra(err error, extra map[string]interface{}) {
raven.CaptureError(raven.WrapWithExtra(err, extra), nil)
fmt.Println(extra)
return
}
Step2, buat function untuk menyimpan koneksi database ke database mysql dan simpan di file connection.go, perhatikan kode di bawah ini :
package configimport (
"fmt"
"log"
"os""github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)func InitDB() *gorm.DB {
var err error
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true",
os.Getenv("MYSQL_USERNAME"),
os.Getenv("MYSQL_PASSWORD"),
os.Getenv("MYSQL_HOST"),
os.Getenv("MYSQL_PORT"),
os.Getenv("DATABASE_NAME"),
)
db, errOpen := gorm.Open("mysql", dsn)
if errOpen != nil {
log.Fatal(errOpen.Error())
}
db.SingularTable(true)err = db.DB().Ping()
if err != nil {
log.Panic(err)
fmt.Print(err.Error())
} else {
fmt.Printf("Successfully connected to MySQL")
}
db.DB().SetMaxIdleConns(60)
//db.LogMode(true)
//db.DB().SetMaxOpenConns(80)return db
}
Untuk lebih memahami project sample ini, Download Full Source, kemudian jalankan dengan cara
go run main.go local
http://localhost:8090/api/users/
baca artikel lainya :
link video tutorial : https://youtu.be/Vb0EOgek_FI