Первое, что вам порекомендую - не стоит прямо вот рабочие сущности кидать в шаблоны. Подготовьте для шаблонов специальные структуры с данными и уже без всяких методов, или хотя бы уже готовый слайс с данными. Поверьте, мизерные потери производительности при заполнении этой структуры из вашей оригинальной Posts стоят того, что выш код будет прозрачен, понятен и прост, что значительно уменьшит возможность багов.
Вот вам простейший пример:
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!--Вот то, что я предложил -->
<h1>Page number {{ .Number }}</h1>
{{ range .Posts }}
<h2>{{ .Title }}</h2>
<p>{{ .Body }}</p>
{{ end }}
<!--А вот то, что вы хотели -->
<h1>Page number {{ .Number }}</h1>
{{ range .Posts.GetSublistByPagenumber .Number }}
<h2>{{ .Title }}</h2>
<p>{{ .Body }}</p>
{{ end }}
</body>
</html>
main.go
package main
import (
"html/template"
"log"
"os"
)
// Структура поста
type Post struct {
ID int
Author string
Title string
Body string
PostingTime string
UpdateTime string
Tags string
Lock int
}
type Posts []Post
func (posts Posts) GetSublistByPagenumber(pageNumber int) Posts {
return Posts{
Post{
ID: 1,
Author: "Vitaliy",
Title: "First post",
Body: "Hello, world!",
PostingTime: "2021-10-10 10:00:00",
UpdateTime: "2021-10-10 10:00:00",
Tags: "first, post",
Lock: 0,
},
Post{
ID: 2,
Author: "Alex",
Title: "Second post",
Body: "Hello, world!",
PostingTime: "2021-10-10 10:00:00",
UpdateTime: "2021-10-10 10:00:00",
Tags: "second, post",
Lock: 0,
},
}
}
// Структура с уже готовыми заполненными данными без всяких методов
type PostTemplate struct {
Number int
Posts Posts
}
func main() {
posts := Posts{}
// Подготавливаем список заранее
sublist := posts.GetSublistByPagenumber(1)
postVars := PostTemplate{
Number: 1,
Posts: sublist,
}
tmpl, err := template.ParseFiles("index.html")
if err != nil {
log.Println(err.Error())
return
}
w := os.Stdout
err = tmpl.Execute(w, postVars)
if err != nil {
log.Println(err.Error())
}
}