Вопрос по – Особый случай для последнего элемента диапазона в текстовых шаблонах Google Go

8

Я пытаюсь написать строку, похожую на эту, используя систему шаблонов go: (p1, p2, p3), где p1, p2, ... происходит из массива в программе. Моя проблема в том, как правильно поставить запятую для последнего (или первого) элемента.

Моя не рабочая версия, которая выводит (p1, p2, p3,) выглядит так:

package main

import "text/template"
import "os"
func main() { 
    ip := []string{"p1", "p2", "p3"}
    temp := template.New("myTemplate")
    temp,_ = temp.Parse(paramList)
    temp.Execute(os.Stdout, ip)

}

const paramList = 
`{{ $i := . }}({{ range $i }}{{ . }}, {{end}})`

Моя лучшая подсказка пока найдена здесьhttp://golang.org/pkg/text/template/ в следующем заявлении:

If a "range" action initializes a variable, the variable is set to the successive elements of the iteration. Also, a "range" may declare two variables, separated by a comma:

$index, $element := pipeline

in which case $index and $element are set to the successive values of the array/slice index or map key and element, respectively. Note that if there is only one variable, it is assigned the element; this is opposite to the convention in Go range clauses. where it's suggested that the index

Это говорит о том, что можно получить индекс в итерации, но я просто не могу понять, что подразумевается под диапазоном, объявляющим две переменные, и где в шаблоне эти переменные должны быть объявлены.

Ваш Ответ

1   ответ
11

Увидетьэтот пример из списка рассылки офигенных. Одним из ключей к этому трюку является то, что шаблонif отличается от языка Goif, Шаблон может проверять нулевое значение, в отличие от языка Go, для которого требуется логическое значение. Магия тогда{{if $index}},{{end}} где $ index не нужно никакого объявления, кроме его появления в присваивании.

Error: User Rate Limit Exceeded Laserallan
Error: User Rate Limit Exceededplay.golang.org/p/KuRh55BHna8

Похожие вопросы