В пхп есть замечательные классы для работы с dom. И там я в три строки кода могу получить все значения a href с хтмл документа. Мне необходимо распарсить в ссылки из html файла. Возможно в Go тоже можно сделать это с такой простотой как и в пхп?
Владимир Грабко: тоже интересно что вас там так задело?:) Я вот хотел к вашему комментарию (golang.org/x/net/html) написать что там адский ад, хотя и вполне корректный:)
Владимир Грабко: напиши свой:) Уверен оно будет таким же страшным как библиотека для связи серверов что у тебя написана, но хоть будет о чём подисскутировать:)
Oleg Shevelev: )))) Если мой код будет поддерживаться командой кодеров более 5 лет то они точно им будут пугать детей так как не чего страшнее в своей жизни не видели))
Oleg Shevelev: а если серьёзно то хз почему у меня такой адский говнокод. Вро де и книг по тому как писать чистый код прочитал 10500 и стараюсь со всех сил а один фиг я сам боюсь своего кода.
Владимир Грабко: Вы себе льстите:) У вас не самый ужасный из возможных кодов:) Сколько лет вы программируете на постоянной основе? Если меньше пяти то удивляться нечему. Если вам кажется что мой код хороший или иногда даже идеальный то я вижу что это только начало на пути к действительно красивому, поддерживаемому и надёжному коду. С каждым годом вижу как меняется собственное представление о том как это делать.
Oleg Shevelev: вы просто не видели какой код у меня в продакшене. два года назад написал монолит на php и сейчас для каждой фичи делаю пачку новых классов которые подменяют функции "изначальных". Я просто напросто не могу править изначальные классы потому что там такое говно что оно ломает половину проэкта при попытке изменения даже имён переменных (повсюду юзается glob и т.д.)
Oleg Shevelev: и вы видете с каждым годом я чутли не скаждой неделью. Возможно из-за того что за эту неделю успеваю прочитать тройку небольших книг (до 300ст.). Я вот сейчас полностью с нуля переписываю свою php библиотеку для роботы с микросервисами.
cijiw: там ведь нет регулярных выражений, там го предлагает механизм токенов, он сам говорит где начало/конец тега, остается лишь перебрать весь текст посимвольно и собрать себе дерево хтмл, сохранить все элементы для удобного поиска/перебора и при надобности иметь возможность быстро находить нужные элементы. Это все предстоит сделать самому, есть библиотеки которые это делают за вас.
for i := range url {
doc, err := html.Parse(strings.NewReader(ParseHtml(url[i])))
if err != nil {
log.Fatal(err)
}
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, a := range n.Attr {
if a.Key == "href" {
for _, value := range ParseEmail(ParseHtml(a.Val)) {
_, ok := registryEMAIL[value]
if !ok {
registryEMAIL[value] = 0
fmt.Println(value)
}
}
break
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
}
cijiw: не, он понимает разницу, жс код будет текстом внутри тега, он даже имена тегов сообщает, умная штука, но уровень парсинга - вот тебе конструктор, сделай сам