отправить функцию в html / шаблон имеет ошибку: функция "" не определена - PullRequest
0 голосов
/ 12 апреля 2019

Я не могу отправить функцию в шаблон, когда я использую другой файл вместо main.go

, моя проблема во второй части.

Первая часть: (первая часть работает нормально.)

Я могу отправить функцию -> "humanSize" в шаблон -> "temp.gohtml"

это мой каталог:

app
|____main.go
|____templates
      |_____index
             |_____temp.gohtml

когда я пишукод, как удар, он работает нормально:

import (
    "html/template"
    "log"
    "net/http"
    "os"
)

var funcMap = template.FuncMap{
    "humanSize": humanSize,
}

var tpl *template.Template

func init() {
    tpl = template.Must(template.New("").Funcs(funcMap).ParseFiles("templates/index/temp.gohtml"))
}
func humanSize() string {
    return "qqqqqqqqqqqqqqqqqqqqq"
}

func getPageHandler(w http.ResponseWriter, r *http.Request) {

    err := tpl.ExecuteTemplate(os.Stdout,"temp.gohtml", nil)
    if err != nil {
        log.Fatalln(err)
    }
}

func main() {
    http.HandleFunc("/", getPageHandler)
    http.ListenAndServe(":8082", nil)
}

это код шаблонов / index / temp.gohmtl:

<html>
    <body>
        {{humanSize}}
    </body>
</html>

вывод в порядке:

<html>
<body>

qqqqqqqqqqqqqqqqqqqqq
</body>
</html>

Вторая часть: (У меня здесь проблема.)

Я хочу переместить код из main.go в controller / index.go

Это мой новый каталог:

app
|____main.go
|____templates
|      |_____index
|             |_____temp.gohtml
|____controller
       |_____index.go
       |_____login.go     

//Answer: I edited this line just for another person wants to know what was the problem...I have imported some files in login.go same as index.go that cause "relative imports" and I got the error. in index.go also we have "relative imports" with config.go

Я пишу код в main.go:

import (
    Con "./controller"
    "net/http"
)

func main() {
    http.HandleFunc("/", Con.GetPageHandler)
    http.ListenAndServe(":8082", nil)
}

и пишу код в controller / index.go:

package controller

import (
    "html/template"
    "log"
    "net/http"
    "os"
)

var funcMap = template.FuncMap{
    "humanSize": humanSize,
}

var tpl *template.Template

func init() {
    tpl = template.Must(template.New("").Funcs(funcMap).ParseFiles("templates/index/temp.gohtml"))
}
func humanSize() string {
    return "qqqqqqqqqqqqqqqqqqqqq"
}

func GetPageHandler(w http.ResponseWriter, r *http.Request) {

    err := tpl.ExecuteTemplate(os.Stdout,"temp.gohtml", nil)
    if err != nil {
        log.Fatalln(err)
    }
}

Ошибка:

2019/04/12 21:44:49 template: temp.gohtml:11: function "humanSize" not defined

резюме: когда я пишу код в main.go, я могу отправить функцию в шаблон, но когда я пишу код в controller / index.go, я не могу отправить функцию в шаблон.

...