package links import ( "io" "golang.org/x/net/html" "golang.org/x/net/html/atom" ) func parse(htmlInput io.Reader) ([]string, error) { doc, err := html.Parse(htmlInput) if err != nil { return nil, err } hrefs := findHrefs(doc) return hrefs, nil } // findHrefs returns all link addresses inside doc. func findHrefs(doc *html.Node) []string { var hrefs []string for node := range doc.Descendants() { if node.Type == html.ElementNode && node.DataAtom == atom.A { for _, attr := range node.Attr { if attr.Key == "href" { hrefs = append(hrefs, attr.Val) } } } } return hrefs }