Я не могу отправить функцию в шаблон, когда я использую другой файл вместо 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, я не могу отправить функцию в шаблон.