چرا سکان آکادمی؟
template ها در گولنگ
مورد تایید سکان آکادمی

template ها در گولنگ

با استفاده از template ها در گولنگ ما میتونیم خروجی برنامه رو به هر صورتی که میخوایم قالب بندی کنیم. برای مثال از template ها میتونیم توی وب اپلیکیشن وقتی صفحه html رندر میگیریم استفاده کنیم یا وقتی که میخوایم ایمیلی ارسال کنیم.

برای کار با template ها در گولنگ دوتا پکیج وجود داره :

  • text/template : این پکیج معمولا برای رشته ساده استفاده میشه.
  • html/template : این پکیج برای صفحات html استفاده میشه.

هر دو پکیج از یک اینترفیس پیروی میکنند، پس تفاوتی در روش استفاده از پکیج ها وجود نداره.

سینتکس

خب قبل از اینکه بریم سراغ پیاده سازی این پکیج باید با سینتکس یه template آشنا بشیم، توی یه قالب پردازش روی دستورات زمانی انجام میشه که اون دستور بین دوتا {{ و }} قرار بگیره در غیر اینصورت دست نخورده باقی میمونه.

استفاده از متغیر ها

توی یک قالب ما میتونیم با عملگر {{ . }} به هر متغیری که میخوایم دسترسی داشته باشیم، برای مثال ما یک struct داریم و میخوایم ازش داخل یک قالب استفاده کنیم، میتونیم به اینصورت {{ FieldName. }} به هر فیلدی داخل این struct دسترسی داشته باشیم. فقط قبلش باید این struct رو با متود Execute به قالب پاس بدیم، که توی ادامه بیشتر توضیح میدم راجبش.

شروط

ما میتونیم از عبارات شرطی داخل یک قالب استفاده کنیم. برای مثال ما میخوایم چک کنیم اگر FieldName خالی نبود این مقدار چاپ بشه باید به صورت زیر عمل کنیم:

{{if .FieldName}} Value of FieldName is {{ .FieldName }} {{end}}

ما میتونیم از else , elseif هم استفاده کنیم:

{{if .FieldName}} // action {{ else }} // action 2 {{ end }}

حلقه ها

با استفاده از اکشن range میتونیم یه slice پیمایش کنیم. که به صورت زیر پیاده سازی میشه:

{{range .Member}} ... {{end}}

اگر ما بخوایم یه slice پیمایش کنیم میتونیم از عملگر {{ . }} توی حلقه استفاده کنیم تا بتونیم به اون مقدار دسترسی داشته باشیم. و یا اگر اون مقدا از نوع struct باشه میتونیم به صورت زیر عمل کنیم:

{{range .Member}} 
{{ .Name }}
{{end}}

رندر گیری صفحات

و در نهایت برای خروجی گرفتن صفحات میتونیم به شکل زیر عمل کنیم:

package main

import (
	"os"
	"text/template"
)

type Todo struct {
	Name        string
	Description string
}

func main() {
	td := Todo{"Test templates", "Let's test a template to see the magic."}

  t, err := template.New("todos").Parse("You have a task named \"{{ .Name}}\" with description: \"{{ .Description}}\"")
	if err != nil {
		panic(err)
	}
	err = t.Execute(os.Stdout, td)
	if err != nil {
		panic(err)
	}
}