Глобальная переменная Golang типа html / template не определена в других пакетах - PullRequest
0 голосов
/ 03 февраля 2019

Я объявил глобальную переменную, как предложено в этом вопросе Нужно ли помещать шаблоны в карту для повторного использования в Go?

Я объявил глобальную переменную в своем основном пакете раньшеfunc main(), но он все еще не объявлен в другом пакете.

package main

import{
  "html/template"
  .....
)

var tmpl = template.New("master")

func main() {

    func init() {

        _, err := tmpl.ParseGlob("templates/*.html")
        if err != nil {
            log.Fatalln("Error loading templates:", err)
        }
....
}    

В другом пакете я пишу внутри функции:

    tmpl.ExecuteTemplate(w, "venue-index.html", res)

, но получаю ошибку

tmpl: undefined

Я понимаю, что есть другие подобные вопросы, но ответы не решили мою проблему.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Это решение, которое я использовал для объявления шаблонов в пакете помощника:

package helpers

import (
    "html/template"
    "log"
)

// Tmpl global template var
var Tmpl = template.New("master")

func init() {
    _, err := Tmpl.ParseGlob("templates/*.html")
    if err != nil {
        log.Fatalln("Error loading templates:", err)
    }
}

Затем в моем пакете контроллеров:

package controllers

import (
        "myapp/helpers"
)

someFunc() {
.... 
helpers.Tmpl.ExecuteTemplate(w, "header.html", nil)
....
} 
0 голосов
/ 03 февраля 2019

tmpl не будет виден из другого пакета.Чтобы импортировать переменные из других пакетов, вы должны обращаться к ним по полному имени и иметь переменные, начинающиеся с заглавной буквы, pack.Tmpl и т. Д.

Также невозможно импортировать переменные из main в другиепакеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...