猿问

迭代 *goquery.Selection

我几天前才开始学习围棋,所以请耐心等待。:)


我正在从带有goquery. 像这样:


package main


import (

    "fmt"

    "log"

    "github.com/PuerkitoBio/goquery"

)


func ExampleScrape() {

    doc, err := goquery.NewDocument("http://lifehacker.com")

    if err != nil {

        log.Fatal(err)

        fmt.Println("fail")

    } else {

        fmt.Println("got it")

    }


    h1_text := doc.Find("h1").Text()

    fmt.Println(h1_text)

}


func main() {

    ExampleScrape()

}

这很好用。我无法弄清楚的是如何将doc.Find("h1").Text()选择转换为数组或切片,以便我可以迭代它们(或者,更好的是,弄清楚是否goquery有一个函数)。我确定有办法做到这一点,对吗?


我尝试这样做(内部func ExampleScrape):


var x []string

doc.Find("h1").Each(func(i int, s *goquery.Selection) {

    append(x, s.Text())

})

但它不起作用,因为append在“嵌套”/闭包函数中仍然是该函数的本地函数——它不会返回到func ExampleScrape. 然后我尝试了这个:


x := doc.Find("h1").Each(func(i int, s *goquery.Selection) {

    return s.Text()

})

for _, i := range x {

    fmt.Println(x)

}

但*goquery.Selection类型不能跨越。


有没有办法*goquery.Selection像这样迭代's ?


顺便说一下,你们这里的人很棒。我总是被我在这里得到的答案所震撼。如果有人可以解释如何做到这一点,请提前感谢 googolplex。:)


qq_遁去的一_1
浏览 228回答 1
1回答

MMTTMM

我认为如果您使用append得当,您的第一次尝试可能会奏效。 append(x, s.Text())不会改变 x,而是返回一个新的切片。所以你真的需要这样做:x = append(x, s.Text())
随时随地看视频慕课网APP

相关分类

Go
我要回答