Get An Element Of A Struct Array By Attribute Value In A Golang Template

- 1 answer

I want to display the value of a certain WooCommerce product custom attribute in a Golang template.

type Produkt struct {
   Attributes []struct {
        ID        int      `json:"id"`
        Name      string   `json:"name"`
        Position  int      `json:"position"`
        Visible   bool     `json:"visible"`
        Variation bool     `json:"variation"`
        Options   []string `json:"options"`

An actual json object looks like this:

   "attributes": [
      "id": 2,
      "name": "Hersteller",
      "position": 5,
      "visible": true,
      "variation": false,
      "options": [
        "Lana Grossa"

So from this example I want to find the first element of the 'Options' array (Lana Grossa) of the element with the name = "Hersteller" of the attributes array.

I tried to adapt the syntax to get an element by index, but could not get it to work...

<input type="text" value="{{ (index (value .Produkt.Attributes.Name eq "Hersteller").Options 0) }}"/>
<input type="text" value="{{ (index (Name .Produkt.Attributes eq "Hersteller").Options 0) }}"/>
<input type="text" value="{{ (index (.Produkt.Attributes.Name["Hersteller"]).Options 0) }}"/>

Any hint is greatly appreciated



There is no simple way to do this with templates. You have to first find the entry you need, and then look at its contents

{{$name := "" }}
{{ range .Product.Attributes }}
{{if eq .Name "Hersteller"}}
   {{$name = (index .Options 0)}}
{{ end }}
<input type="text" value="{{$name}}"/>