Я пытаюсь передать структуру, содержащую несколько фрагментов структур, в шаблон. Есть ли способ реорганизовать шаблон, чтобы я мог отображать все данные, используя только один цикл (чтобы избежать копирования и вставки для каждой отдельной структуры Stock, которая у меня есть). Я попытался передать массив 2d и не смог получить доступ к нужным мне элементам, и мне не удалось самостоятельно выполнить рефакторинг шаблона только для одного цикла использования.
Следующий код является упрощенной версией того, с чем я работаю.
package main
import (
"fmt"
"html/template"
"os"
)
type Stock struct {
BuyPrice string
SellPrice string
}
type StockPortfolio struct {
StockA []Stock
StockB []Stock
}
func main() {
// Stocks aren't combined from the get-go because I have more
// struct fields relating to each individial trading pair
stockAUSD := Stock{
BuyPrice: "1.00 USD",
SellPrice: "1.10 USD",
}
stockAEURO := Stock{
BuyPrice: "0.85 EUR",
SellPrice: "0.94 EUR",
}
stockBUSD := Stock{
BuyPrice: "2.00 USD",
SellPrice: "2.10 USD",
}
stockBEURO := Stock{
BuyPrice: "1.70 EUR",
SellPrice: "1.88 EUR",
}
stockA := []Stock{stockAUSD, stockAEURO}
stockB := []Stock{stockBUSD, stockBEURO}
portfolio := StockPortfolio{stockA, stockB}
tmpl := `
<table>
<tr>
<td>Price A</td>
{{range .StockA}}
<td>{{ .BuyPrice }}</td>
<td>{{ .SellPrice }}</td>
{{end}}
</tr>
<tr>
<td>Price B</td>
{{range .StockB}}
<td>{{ .BuyPrice }}</td>
<td>{{ .SellPrice }}</td>
{{end}}
</tr>
</table>
`
t := template.Must(template.New("tmpl").Parse(tmpl))
err := t.Execute(os.Stdout, portfolio)
if err != nil {
fmt.Println("executing template:", err)
}
}