Параметр, который вы передаете во исполнение шаблона во второй раз, должен совпадать с тем, который вы передаете в первый раз.
Первое, что вы делаете:
t.Execute(os.Stdout, []string{"app1", "app2", "app3"})
Второе, что вы делаете:
err = t.Execute(f, t)
Вы передали сам шаблон (t
).Измените его на:
err = t.Execute(f, []string{"app1", "app2", "app3"})
Ваш шаблон выполняет итерацию по переданному параметру (с действием {{range}}
), который работает при передаче фрагмента, и не работает при передаче шаблона, это указательдля структуры, это не то, что механизм шаблонов может перебирать.