Esa operación básica en casi cualquier lenguaje que es poner en funcionamiento un contador en Go no lo es en absoluto. Estoy aprendiendo la sintaxis que usa Hugo para construir sus templates, Go templates, y pensé que definir una variable numérica, asignarle el valor 0, e incrementar su valor con cada iteración se haría igual que en cualquier otro lenguaje, pero no. De hecho hasta que ha salido la versión 0.48 de Hugo no se podía ni redefinir el valor de una variable. Para versiones anteriores hay que recurrir a Scratch, una serie de métodos que permiten salvar esta limitación en Go Template.
Usando Scratch hacer un counter vuelve a ser posible:
{{ $.Scratch.Set "counter" 0 }} {{range $array }} {{ $.Scratch.Set "counter" (add ($.Scratch.Get "counter") 1) }} Valor de $counter en esta vuelta del loop: {{$.Scratch.Get "counter"}} {{end}}