Assalamu'alaikum wr. wb
Pada kali ini penulis belajar tentang bagaimana menggunakan templating, struct, dan struct on method. Langsung saja, singkat cerita penulis baru tahu jika method bisa dihubungkan dengan struct, jd lebih mirip method yg ada di dalam class, dan method tersebut dapat dipanggil dari instance class tersebut.
Pertama kita buat contoh struct kita, pada kali ini penulis membuat contoh struct `Person`
berikut adalah isinya :
Kemudian kita tambahkan fungsi/method yang melekat pada struct
penulisannya adalah seperti ini
func (obj <STRUCT_NAME>) methodName() {atau apabila ingin menggunakan reference dari struct nya dapat ditulis seperti ini :
// do something
}
func (obj *<STRUCT_NAME>) methodName() {Sebagai contoh berikut adalah method yang ditambahkan ke fungsi struct `Person` :
// do something
}
Dari method, dan struct yang telah kita buat diatas, kita akan membuat instance dari Struct Person, dan memanggil method-methodnya, sehingga kode akan menjadi seperti ini :
Dan jika dijalankan :
go run main.go
Dari sana kita bisa melihat, bahwa method changeTemporary tidak mengubah nilai dari variable dalam struct, karena tidak memiliki reference pada parameternya. Untuk bisa mengubahnya kita harus memberikan tanda asterisk (*) pada parameternya, seperti method
changeName(name string){} atau DoBirthday(){} .
Sekarang dari struct di atas penulis ingin menampilkannya dalam bentuk html :
Untuk menampilkan, penulis sedang belajar menggunakan library dari package text/template, yang sebelumnya harus kita import-kan terlebih dahulu.
import (
// other package
"text/template"
)
Dalam golang terdapat fungsi init() yang dapat kalian lihat disini Effective Go - INIT.
Singkatnya fungsi init() ini pasti di jalankan oleh golang, dimana dia dipanggil setelah deklarasi variable, dan sebelum fungsi main().
Dalam fungsi init() ini kita akan mem-parsing template.
Jadi sebelum itu kita buat file templatenya dengan nama tpl_main.gohtml
Setelah itu kita akan membuat variable penampung struct template,
var tpl *template.Template
Oh iya, kali ini penulis juga skalian membagikan cara penggunaan fungsi sebagai pipeline template. Pipeline disini adalah mentransform value dari variable, yang dalam kasus ini, pipeline yang akan kita buat adalah parseDate.
Untuk menggunakan pipeline kita perlu mem-passing fungsi ke dalam template.
Cara mempassing fungsi ke template adalah
1. Kita harus memasukkan fungsi kita kedalam object template.
FuncMap yang detail nya dapat kalian lihat disini Template - FuncMap. Object FuncMap ini memiliki parameter map[string]interface{}, sehingga kita perlu memasukkan string namaFungsi tersebut (nama fungsi ini akan digunakan di template) dan method yang akan di passing.
var variableFunc = template.FuncMap {
"parseDate": parseDate,
}
value parseDate adalah sebagai berikut :
Time format dapat dilihat di sumber Time - Format() .
func parseDate(date time.Time) string {
return date.Format("Jan 2 2006")
}
Parsing template berada pada fungsi init(), sehingga ketika program dijalankan secara otomatis akan mem-parse template sebelum main() dan akan di Execute di fungsi main()
Maksud dari kode di atas adalah kita membuat instance dari template baru dengan menggunakan template.New() dengan parameter nama, yang nama tersebut harus merupakan template yang kita parsing, maka dari itu nama yang di masukkan adalah "tpl_main.gohtml".
Kemudian kita akan passing parameter fungsi (FuncMap) tadi di method Funcs() dengan
parameter FuncMap.
Setelah itu, kita parse file dengan parameter nama file yang akan kita parse.
Sedangkan template.Must() merupakan handling error dan akan memberikan panic() ketika
terjadi error, dan return type dari Must adalah berupa Template.
Karena kita akan megenerate file HTML, maka kita perlu menggunakan package os.
fungsi yg akan kita gunakan dalam membuat file adalah Create() dapat dilihat disini OS - Create().
Berikut adalah penggunaan fungsi create pada package os.
Diatas terdapat code
defer nf.Close()Kode di atas maksudnya adalah (menurut saya) pantang close sebelum fungsi dibawah dijalankan. Jadi singkatnya, fungsi nf.Close() akan dipanggil di akhir proses sebuah fungsi.
sumber : MEDIUM - Defer, Panic, dan Recovery
Setelah itu kita beralih ke tpl_main.gohtml, dan kita akan menggunakan Predefined Global Function in Template
Dari kode di atas terdapat variable {{ .Name }} maksudnya adalah . (dot) di dalam template adalah representasi variable yang telah kita passing. Karena kita tadi mem-passing variable dhanar maka . (dot) disini berisi variable dhanar yang telah kita buat di fungsi main. Sedangkan pipeline dari Birthday yang kita passing adalah berupa struct time.Time maka dari itu agar dapat ditampilkan kita parse date ke format yang kita inginkan dengan fungsi parseDate yang telah kita buat.
(Template - Pipeline)
Sehingga kode main.go berakhir seperti ini :
Setelah kita run program maka hasilnya berupa seperti ini :
Dan akan menghasilkan 1 file html di directory project
Dan ketika dibuka dengan browser :
Sekian yang dapat saya sampaikan,
Terima Kasih,
Wassalamu'alaikum Wr. Wb.

No comments:
Post a Comment