Не присваиваются значения в процессе вызова метода типа
Мой код работает так:
Есть тип источника, у которого есть адрес и обьект, который источник содержит, у этого обьекта есть селектор 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()
}