Не присваиваются значения в процессе вызова метода типа

Мой код работает так:

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

Код

package main

import (
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "net/http"
)

type Item struct {
    Selector string
    Fields   []Field
}

type Field struct {
    Name     string
    Selector string
    Value    string
}

type Source struct {
    Address string
    Item    Item
}

func (s Source) ParseData() Item {
    request, _ := http.Get(s.Address)
    html, _ := goquery.NewDocumentFromReader(request.Body)

    html.Find(s.Item.Selector).First().Each(
        func(index int, item *goquery.Selection) {
            for _, field := range s.Item.Fields {
                field.Value = item.Find(field.Selector).Text()
            }
        })
    return s.Item
}

func main() {
    stopGame := Source{
        Address: "https://stopgame.ru/games",
        Item: Item{
            Selector: ".simple-list .item",
            Fields: []Field{
                {
                    Name:     "Caption",
                    Selector: ".caption",
                },
                {
                    Name:     "About",
                    Selector: ".game-specs",
                },
                {
                    Name: "Rating",
                    Selector: ".score",
                },
            },
        },
    }
    for _, field := range stopGame.ParseData().Fields {
        fmt.Println(field.Value)
    }
}

Когда дело доходит до выполнения цикла, который проходится по всем полям полученного обьекта из источника и выводит на экран значение поля, то ничего попросту не выводится


Ответы (1 шт):

Автор решения: Ainar-G

Так вы же пишете данные в копию структуры, а не в саму структуру:

for _, field := range s.Item.Fields {
	field.Value = item.Find(field.Selector).Text()
}

Пишите в саму структуру по индексу или по указателю:

for i := range s.Item.Fields {
	s.Item.Fields[i].Value = item.Find(s.Item.Fields[i].Selector).Text()
}
for i := range s.Item.Fields {
	field := &s.Item.Fields[i]
	field.Value = item.Find(field.Selector).Text()
}
→ Ссылка