Go lang : connecting to Mysql and Exporting to Excel yeehaw!

things you need:

  1. mysql driver package : github.com/go-sql-driver/mysql
  2. excel package : github.com/360EntSecGroup-Skylar/excelize

language : bahasa indonesia

semisal folder project nya : d:/go/src/goexcel/

oh btw, saya pakai dummy database nya mysql employees, bisa pakai database yang udah ada juga ga masalah, saya belajar pakai tutorial di situs nya novalagung

install dulu package nya, buka terminal di path folder project kita.

go get -u github.com/go-sql-driver/mysql
go get -u github.com/360EntSecGroup-Skylar/excelize

buat file main.go dan import package nya. kalau di visual studio code nanti terisi otomatis waktu kita ngetik di func

package main

import (
    "database/sql"
    "fmt"
    "log"

    "github.com/360EntSecGroup-Skylar/excelize"
    _ "github.com/go-sql-driver/mysql"
)

lalu kita buat type struct untuk kita simpan nanti hasil ambil data dari mysql nya, dept adalah nama data type yang bisa kita pakai

type dept struct {
    dept_no string
    dept_name string
}

and then, kita buat untuk koneksi ke database,

func connect() (*sql.DB, error) {
    db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/employees")
    if err != nil {
        log.Fatal(err)
    }
    err = db.Ping()
    if err != nil {
        panic(err.Error())
    }
    return db, nil
}

sql.Open() go lang tidak langsung membuka koneksi ke db mysql tapi cuma mempersiapkan jalur, kalau ga ada yang pakai ya cuma nongkrong aja ga di buka. jadi ga bisa dipakai untuk cek apakah koneksi berhasil nyambung atau tidak. untuk cek koneksi ke db kita bisa pakai db.Ping()

sql.Open("mysql", "root:@tcp(localhost:3306)/employees")

disini koneksi ke mysql nya tidak pakai password, komplit nya sih seperti dibawah ini

sql.Open("mysql", "username:password@tcp(host:port)/database")

sep kita lanjut,

kita buat func untuk query sql nya

func sqlQuery() []dept {

    db, err := connect()
    if err != nil {
        log.Fatal(err)
    }
// selalu defer db.close() alias ditutup, defer akan mengeksekusi 
// db.close() diakhir setelah semua proses selesai
// simpan di awal ok, mau didefer di akhir juga bagus
    defer db.Close()

    rows, err := db.Query("select * from departments")
    if err != nil {
        log.Fatal(err)
    }
// selalu defer close koneksi setelah dipakai
    defer rows.Close()

    var result []dept

    for rows.Next() {
        var each = dept{}
        var err = rows.Scan(&each.dept_no, &each.dept_name)
        if err != nil {
            log.Fatal(err)
        }
        result = append(result, each)
    }

    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }

    return result
}

disini kita pada func sqlQuery kita menggunakan tipe data yang dibuat tadi yaitu array dept, []dept. func akan me return result dari hasil query select table departments di database employees.

kita buat func untuk export ke excel,

func exportExcel(result []dept) {

    xlsx := excelize.NewFile()
    sheet1Name := "holy sheet"

    xlsx.SetSheetName(xlsx.GetSheetName(1), sheet1Name)

    err := xlsx.AutoFilter(sheet1Name, "A1", "B1", "")

    for i, each := range result {

        xlsx.SetCellValue(sheet1Name, fmt.Sprintf("A%d", i+1), each.dept_no)

        xlsx.SetCellValue(sheet1Name, fmt.Sprintf("B%d", i+1), each.dept_name)

    }

    err = xlsx.SaveAs("./file2.xlsx")

    if err != nil {

        fmt.Println(err)

    }

}

jadi kira2 begini : buat file baru, dengan nama sheet holy sheet. set nama sheet, tambah fitur auto filter (filter excel) dari A1 sampai dengan B1, iterasi each dari i sampai range result nya, set cell value nya tiap iterasi di A ke i (A1,A2…dst) dept no, dan set juga untuk dept nama di B#. save file nya buat dalam format excel di ./file2.xlsx

terakhir kita panggil function yang sudah dibuat di func main(). main ini ssebagai func yang akan di eksekusi ketika menjalankan program

func main() {
    var res []dept
    res = sqlQuery()
    exportExcel(res)
}

untuk mencoba menjalankan program, di terminal pada path folder project lakukan

go run namafile.go

jika benar akan muncul file excel namafile.xlsx misal disini namanya file2.xlsx

selamat makan jangan lupa baca doa sebelum tidur

GO lang : install on windows

why windows? because thats all i have. ok kita mulai,

  1. download dan install golang, setelah di download cara install nya biasa aja next next.
  2. kita setting GOPATH, go path adalah tempat proyek2 kita disimpan dan juga tempat dimana git disimpan. step by step detail ada di page github nya golang disini

udah gtu aja,

setting gopath.

  • buat folder misal D:\project\go
  • klik start ketik env, pilih edit system environtment
  • muncul menu, klik environtment variables
  • muncul lagi menu, di atas di user variables, klik new masukan nama variable name : GOPATH , variable value folder yang kita buat tadi : D:\project\go , klik ok
  • udah

so, nanti kalau mau pakai library alias package semisal mux, gorm, dst git clone aja di folder itu biar bisa dipakai. K gaes? sipp dah.

btw, extra:

Laravel : tambahin adminlte

cuman mau masukin link nya aja mungkin di copas nanti.

https://www.rumahcoding.co.id/2019/02/25/tutorial-1-penggunaan-admin-lte-template-pada-laravel/

cukup mudah. jelas, padat. tapi kalau cari part 2 nya. ga ketemu itu aja cukup buat integrasi adminlte.

ada juga yang paling pas menurut saya,

https://gilacoding.com/read/cara-menggabungkan-template-lain-adminlte-ke-laravel-5

di gilacoding step by step tidak terlalu dijelaskan karena tutorial mengacu ke tutorial sebelumnya di situs gilacoding.

oke lah

Laravel vue js: Setting baseurl api untuk localhost

cara setting baseurl api untuk localhost, jika peruntukan aplikasi adalah untuk jaringan local yang baseurl nya kira2 localhost/folderaplikasi/public/api/namaapi,

tambahkan baseurl ini di head, dengan begitu akan muncul root url dari “/”

<meta name="api-base-url" content="{{ url('/') }}" />

lalu pada app.js masukan,

window.axios.defaults.baseURL = document.head.querySelector('meta[name="api-base-url"]').content;

script ambil data di dokumen head dengan meta = “api-base-url”, hanya saja kalau dilihat di inspect atau page source bakalan terlihat url nya.

sekian catatan hari ini

https://stackoverflow.com/questions/45995502/how-to-set-root-base-url-for-a-laravel-vujs-project

Laravel : Pass More Than One Variable

so, i was wondering as an amateur, i like to pass things

to pass one variable to view in laravel you do dis :

return view('pages')->with('variable');

to pass more than one like a chain combos in street fighter

return view('pages')->with('variable1')->with('variable2')->with('variable3');

or

pass more than one, in one compact command, like tupperware

return view('pages')->with(compact('var1', 'var2','hadoken'));

 

or as how i read on stackoverflow, using array to pass variable. but …

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with('data', ['ms' => $ms, 'persons' => $persons]));
}

But, in this case, you would have to access them this way:

{{ $data['ms'] }}