gogoquery

how write link in links


package main

import (
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "log"
)

func main() {

    var links string = ""

    doc, err := goquery.NewDocument("https://dev.bolshoi.ru/visit/buyingnew/")
    if err != nil {
        log.Fatal(err)
    }

    doc.Find("a:contains(\"График предварительной продажи билетов на декабрь 2023\")").Each(func(i int, s *goquery.Selection) {
        link, _ := s.Attr("href")
        fmt.Printf(link)
    })
}

I just started learning the language, I don't understand well what needs to be done


Solution

  • Here is how you assign the link value to the outer links variable:

    package main
    
    import (
        "fmt"
        "log"
        "net/http"
    
        "github.com/PuerkitoBio/goquery"
    )
    
    func main() {
        var links string = ""
    
        resp, err := http.Get("https://dev.bolshoi.ru/visit/buyingnew/")
        if err != nil {
            log.Fatal(err)
        }
        doc, err := goquery.NewDocumentFromReader(resp.Body)
        if err != nil {
            log.Fatal(err)
        }
    
        doc.Find("a:contains(\"График предварительной продажи билетов на декабрь 2023\")").Each(func(i int, s *goquery.Selection) {
            link, _ := s.Attr("href")
            fmt.Println(link)
            links = link
        })
        fmt.Println(links)
    }
    

    If there are multiple links you could make a slice:

    links := []string{}
    
    //...
    
    doc.Find("a:contains(\"График предварительной продажи билетов на декабрь 2023\")").Each(func(i int, s *goquery.Selection) {
        link, _ := s.Attr("href")
        fmt.Println(link)
        links = append(links, link)
    })
    fmt.Println(links)