मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मेरी टेम्पलेट फ़ाइल में मेरी वैध तिथि है और यदि ऐसा है तो एक div पॉप्युलेट करें, अन्यथा इसे खाली छोड़ दें। डेटा प्रकार mysql.NullTime है।
मैं जो करने की कोशिश कर रहा हूं, यहां है:
{{ if .StartDate ne nil }}
<div class="box date-row" id="startdate-{{ .DepartureTimeID }}">{{ .StartDate.Format "2006-01-02" }}</div>
{{ else }}
<div class="box date-row" id="startdate-{{ .DepartureTimeID }}"></div>
{{ end }}
ऐसा लगता है कि काम करने के लिए, मैं एक गैर-शून्य तिथि के लिए कैसे परीक्षण कर सकता हूं?
1 उत्तर
यदि यह एक अनिवार्य मान है, तो आपको टेम्पलेट को प्रस्तुत करने से पहले इसे सत्यापित करना चाहिए।
हालांकि, यदि यह वैकल्पिक है और/या आप एक टेम्पलेट संचालित एप्लिकेशन लिख रहे हैं, तो आपके पास जो कुछ भी आप चाहते हैं उसे प्राप्त करने के लिए आपके पास कम से कम दो विकल्प हैं।
केवल शून्य मानों का उपयोग करना
अच्छे उपयोग के लिए शून्य मान रखें: time.Time
के लिए जो कि युग है। तो, यह मानते हुए कि आपके पास अतीत में StartDate
नहीं हो सकता है, आप गीलेर की तुलना कर सकते हैं कि आपका StartDate युग के बाद है।
package main
import (
"html/template"
"os"
"time"
)
// Note the call to the `After` function of the date.
const templateText = `
{{ if .Data.StartDate.After .Epoch }}
<div class="box date-row" id="startdate-{{ .Data.DepartureTimeID }}">{{ .Data.StartDate.Format "2006-01-02" }}</div>
{{ else }}
<div class="box date-row" id="startdate-{{ .Data.DepartureTimeID }}">No date</div>
{{ end }}
`
func main() {
// shortcut for the sake of brevity.
tmpl := template.Must(template.New("titleTest").Parse(templateText))
// Create an anonymous wrapper struct for your data and the additional
// time value you need to compare against
tcx := struct {
// This of course may be of the type you actually use.
Data struct {
StartDate time.Time
DepartureTimeID int
}
Epoch time.Time
}{
Data: struct {
StartDate time.Time
DepartureTimeID int
}{time.Now(), 1},
Epoch: time.Time{},
}
tmpl.Execute(os.Stdout, tcx)
}
एक कस्टम फ़ंक्शन का उपयोग करना
यह बहुत अधिक आत्म व्याख्यात्मक है: बस एक कस्टम फ़ंक्शन को परिभाषित करें जो आपकी तिथि को मान्य करता है। इस उदाहरण में, मैंने फिर से शून्य मान के विरुद्ध जाँच की है। हालाँकि, आप अपनी इच्छानुसार दानेदार बना सकते हैं, निश्चित रूप से:
package main
import (
"html/template"
"os"
"log"
"time"
)
const templateText = `
{{ if afterEpoch .StartDate }}
<div class="box date-row" id="startdate-{{ .DepartureTimeID }}">{{ .StartDate.Format "2006-01-02" }}</div>
{{ else }}
<div class="box date-row" id="startdate-{{ .DepartureTimeID }}"></div>
{{ end }}
`
func AfterEpoch(t time.Time) bool {
return t.After(time.Time{})
}
type yourData struct {
DepartureTimeID int
StartDate time.Time
}
func main() {
funcMap := template.FuncMap{
"afterEpoch": AfterEpoch,
}
tmpl := template.Must(template.New("fmap").Funcs(funcMap).Parse(templateText))
log.Println("First run")
tmpl.Execute(os.Stdout, yourData{1, time.Now()})
log.Println("Second run")
tmpl.Execute(os.Stdout, yourData{DepartureTimeID:1})
}
संपादित करें:
बेशक, आप दूसरे समाधान के लिए पाइप नोटेशन का भी उपयोग कर सकते हैं, जो कि अधिक पठनीय के लिए है, इम्हो: {{ if .StartDate | afterEpoch }}
संबंधित सवाल
नए सवाल
go
गो एक ओपन-सोर्स प्रोग्रामिंग भाषा है। यह स्वत: मेमोरी प्रबंधन, प्रकार सुरक्षा, कुछ गतिशील टाइपिंग क्षमताओं, अतिरिक्त अंतर्निहित प्रकार जैसे चर-लंबाई सरणियों (स्लाइस कहा जाता है) और कुंजी-मान मानचित्रों को जोड़ने के लिए, सी से व्युत्पन्न एक वाक्यविन्यास के साथ सांख्यिकीय रूप से टाइप किया जाता है, और बड़े मानक पुस्तकालय।