मेरे वर्तमान निर्देशिका संरचना ऐसा दिखाई देता है:जाओ: template.ParseFiles के लिए टेम्पलेट फ़ाइल नाम निर्दिष्ट करना
App
- Template
- foo.go
- foo.tmpl
- Model
- bar.go
- Another
- Directory
- baz.go
फ़ाइल foo.go
ParseFiles
का उपयोग करता init
दौरान टेम्पलेट फ़ाइल में पढ़ने के लिए।
import "text/template"
var qTemplate *template.Template
func init() {
qTemplate = template.Must(template.New("temp").ParseFiles("foo.tmpl"))
}
...
foo.go
के लिए यूनिट परीक्षण अपेक्षित काम करते हैं। हालांकि, अब मैं bar.go
और baz.go
के लिए यूनिट परीक्षण चलाने की कोशिश कर रहा हूं जो दोनों foo.go
आयात करते हैं और मुझे foo.tmpl
खोलने की कोशिश करने पर एक दहशत मिलती है।
/App/Model$ go test
panic: open foo.tmpl: no such file or directory
/App/Another/Directory$ go test
panic: open foo.tmpl: no such file or directory
मैं एक रिश्तेदार निर्देशिका के रूप में टेम्पलेट का नाम निर्दिष्ट ("./foo.tmpl"), एक पूर्ण निर्देशिका (की कोशिश की है "~/जाना/src/github.com/ऐप्स/खाका/foo। tmpl "), एक ऐप रिश्तेदार निर्देशिका (" /App/Template/foo.tmpl "), और अन्य लेकिन दोनों मामलों के लिए कुछ भी काम नहीं करता है। यूनिट परीक्षण bar.go
या baz.go
(या दोनों) के लिए विफल हो जाते हैं।
मेरी टेम्पलेट फ़ाइल कहां रखी जानी चाहिए और मुझे ParseFiles
पर कॉल कैसे करना चाहिए ताकि यह हमेशा मुझे टेम्पलेट फ़ाइल मिल सके, चाहे मैं किस निर्देशिका से go test
कहूं?
आप आपको बस इतना करना कोशिश कर रहे हैं का एक स्पष्ट उदाहरण पोस्ट कर सकते हैं? मैंने 'मॉडल' से 'ParseFiles (" ../ Template/foo.tmpl ")' कोशिश की और यह ठीक काम करता है। – creack
लेकिन अगर मैं गहरी निर्देशिका में 'परीक्षण करें' चलाने की कोशिश करता हूं तो यह अब फिर से काम नहीं करेगा। जो मैं समझ सकता हूं, 'परीक्षण करें' हमेशा मौजूदा कार्यशील निर्देशिका को सेट करता है और फिर 'पारसेफाइल' इसे 'पैरासेफाइल' नामक फ़ाइल के सापेक्ष होने के बजाय टेम्पलेट्स खोजने के लिए मूल निर्देशिका के रूप में उपयोग करता है। यह बहुत नाजुक है इसलिए मुझे लगता है कि मुझे कुछ गलत करना होगा। – Bill
मैंने अपनी समस्या को अद्यतन करने के लिए अद्यतन किया है जिसमें मैं चल रहा हूं। – Bill