Easiest would be to only pass 5 elements, so you don't need any logic in the template.
You can also do this in template, if you also store the index in the {{range}}
action. Then you can use an {{if}}
action to check the index, and only render the body of the {{if}}
if the index is less than 5:
{{range $i, $e := .Categorias}}{{if lt $i 5}}
<li class="nav-item">
{{.Nome}}
</li>
{{end}}{{end}}
Here's a simple example demonstrating it:
func main() {
t := template.Must(template.New("").Parse(src))
numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
if err := t.Execute(os.Stdout, numbers); err != nil {
panic(err)
}
}
const src = `{{range $i, $e := .}}{{if lt $i 5}}{{.}} {{end}}{{end}}`
Output (try it on the Go Playground):
0 1 2 3 4
Go 1.10 template extension
Note that in Go 1.10 there will be new {{break}}
and {{continue}}
actions which will provide an alternative, better solution for this.
It will look something like this:
{{range $i, $e := .Categorias}}
<li class="nav-item">
{{.Nome}}
</li>
{{if eq $i 4}}{{break}}{{end}}{{end}}
This new {{break}}
action will provide a superior solution as the above {{range}}
action will only iterate over 5 elements at most (while the other solution without {{break}}
has to iterate over all elements, just elements with index >= 5 are not rendered).