Go

Go Dilinde Mustache Template Sistemi Kullanımı

Güncelleme:
Go programlama dili Text ve HTML çıktıları üretmek için standart olarak text/template ve html/template paketlerini sağlamakta. Template konusunu ilerlettikçe bu paketlerden de bahsedeceğim. Ancak, şimdilik ...
GÖRSEL
Go programlama dili Text ve HTML çıktıları üretmek için standart olarak text/template ve html/template paketlerini sağlamakta. Template konusunu ilerlettikçe bu paketlerden de bahsedeceğim. Ancak, şimdilik önceliğim Mustache template engine bağlamındaki yazıları tamamlamak. Go dilinde {{Mustache}} kullanımı bu anlamda serinin da son yazısı. Hemen vakit kaybetmeden konu başlığımızı atalım.

Go Dilinde Mustache Template Engine Kullanımı

Öncelikle, Go Mustache paketi bir fork olarak cbroglie/mustache üzerinden devam etmekte. Dolayısıyla go get işleminde kaynak olarak güncel fork’u kullanmak gerekmekte. Go dili uyarlamasında ayrıca Cli aracılığıyla da template işlemleri yapmak mümkün. İlk olarak bu kullanıma bakalım.
mustache [data] template [flags]
Hızlıca bir örnek işlem gerçekleştirelim. Aşağıdaki içeriğe sahip bir template içeriğimiz olsun ve bu içeriği doğrudan YAML dosyamız olsun.
invoice: 34843
date   : 2001-01-23
bill-to:
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
Yukarıdaki içerik YAML > Start örneğinin sadeleştirilmiş hali. Bu dosyamızı data.yml olarak isimlendirelim. Şimdi bir de bir şablona ihtiyacımız olacak.
invoice: {{invoice}}
date   : {{date}}
bill-to:
    given  : {{bill-to.given}}
    family : {{bill-to.family}}
    address:
        city    : {{bill-to.address.city}}
        state   : {{bill-to.address.state}}
        postal  : {{bill-to.address.postal}}
product:
{{#product}}
    - sku         : {{sku}}
      quantity    : {{quantity}}
      description : {{description}}
      price       : {{price}}
{{/product}}
tax  : {{tax}}
total: {{total}}
Şablonumuzun adını da template.mustache olsun. Komut satırı arayüzüne mustache üzerinden dosyalarımızı ilettiğimizde yml içeriğimiz doğrudan ilgili template’e aktarılacak ve sonuç ekrana dökülecektir.
mustache data.yml template.mustache
Şimdide bir go dökümanı oluşturalım ve mustache template’i go kodumuzla ilişkilendirelim. Yazının giriş bölümünde de belirttiğim üzere öncelikle paketi geliştirmelerin devam ettiği fork üzerinden indirmeliyiz.
go get github.com/cbroglie/mustache
Örnek kodumuzu yine önceki yazılarda olduğu gibi Hello! My name is {{name}} {{surname}} ile oluşturalım.
package main
 
import (
	"github.com/cbroglie/mustache"
)
 
func main() {
	data, err := mustache.Render("Hello! My name is {{name}} {{surname}}", map[string]string{"name": "Chris", "surname": "Mcguire"})
	println(data)
 
	if err != nil {
		panic(err)
	}
}
mustache.Render() içerisinde yer tutucuları ve veriyi oluşturduğumuz map‘i barındıran iki alan yer almakta. Bu sayede, map[string]string{"name": "Chris", "surname": "Mcguire"} ile name ve surname için atadığımız değerler metin içerisindeki yer tutucular olan {{name}} {{surname}} ile yer değiştirmekte. Aşağıdaki bir diğer örneğimizde ise, mustache.ParseString() içeriğinde yer alan ifade belleğe alınmakta, for döngüsü ile tmpl.FRender() içeriğinden gelen değerle birleştirilerek ekrana dökülmekte.
package main
 
import (
	"github.com/cbroglie/mustache"
	"bytes"
	"fmt"
)
 
func main() {
 
	tmpl, _ := mustache.ParseString("hodor? {{c}}")
 
	var buf bytes.Buffer
 
	for i := 0; i < 10; i++ {
	    tmpl.FRender(&buf, map[string]string{"c": "hodor! "})
	    fmt.Printf("%v. output: %v\n", i+1, buf.String())
	}
}
go run ile kodumuzu uyguladığımızda aşağıdaki sonuç dönmektedir.
1. output: hodor? hodor!
2. output: hodor? hodor! hodor? hodor!
3. output: hodor? hodor! hodor? hodor! hodor? hodor!
4. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
5. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
6. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
7. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
8. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
9. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
10. output: hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor! hodor? hodor!
Go mustache paketinin kullanımına dair gerekli oldukça eklemeler yapmaya çalışacağım. Ancak, go’nun standart olarak kullanıma sunduğu template yapısının da oldukça kullanışlı olduğunu ve çoğu durumda tercihimin bu standart paketlerden yana olacağını da eklemeliyim.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.