Go 模板一起迭代多个数组

dav*_*o36 0 html templates go

我在这里阅读了很多与 Go 模板相关的帖子,但找不到我要找的内容。

我有这两个结构,我无法更改它们,因为它们在我正在帮助的项目的其他地方使用:

type Schedule struct {
    Description   string
    ControlNights int
    PlayNights    int
    StartDay      int
    Combos        []Combo
}

type Combo struct {
    From    time.Time
    Every   int
    Until   time.Time
    Sounds  []string
    Volumes []int
    Waits   []int
}
Run Code Online (Sandbox Code Playgroud)

我需要在 html 页面上显示这些数据。所以我需要迭代每个 Combo。我可以做到这一点,但我需要将声音、音量和等待放在一起,即声音 x 音量 y 等待 z。其中 x、y 和 z 是 Sounds、Volumes 和 Waits 数组中的值。这些数组可以是 >= 1 的任意长度,但它们都具有相同的长度。

我希望它看起来像这样:

在此输入图像描述

我已经尝试过这个:

            {{range .Schedule.Combos}}
            <div class="container">
                <div class="row">
                    <div class="col">
                        <div class="card mt-2 ml-2">
                            <div class="card-body">
                                <h5 class="card-title">
                                    <strong>Timing</strong>
                                </h5>
                                <h5 class="card-text">
                                    Play every {{.Every}} mins
                                </h5>
                                <h5 class="card-text">
                                    From time {{TimeOfDayToString .From}}
                                </h5>
                                <h5 class="card-text">
                                    Until {{TimeOfDayToString .Until}}
                                </h5>
                            </div>
                        </div>
                    </div>
                    <div class="col">
                        <div class="card mt-2">
                            <div class="card-body">
                                <h5 class="card-title">
                                    <strong>Sounds</strong>
                                </h5>
                                {{range .Sounds}}
                                    <h5 class="card-text">
                                        Sound {{.}}
                                    </h5>
                                {{end}}
                            </div>
                        </div>
                    </div>
Run Code Online (Sandbox Code Playgroud)

这允许我调整声音的范围,但我也需要调整音量并等待(等待播放下一个声音的时间),同时以某种方式......

我想我可以做的是创建一个不同的 Combo 结构并将其传递给我的 html 模板,但我希望如果有一种方法可以按原样使用结构来避免这种情况。

Bur*_*dar 5

如果您确定这三个数组具有相同数量的元素,那么您可以这样做:

{{ $volumes := .Volumes }}
{{ $waits := .Waits }}
{{range $index,$sound := .Sounds }}

Print Sounds[i] like this: {{$sound}}

Print volumes[i] like this: {{index $volumes $index}}

Print waits[i] like this: {{index $waits $index}}

{{end}}
Run Code Online (Sandbox Code Playgroud)

这应该会给你一个想法。