Работа с URL отличается из-за различий в гиперссылках. Как упомянуто выше, гиперссылка в теге привязки может быть во многих форматах. Вот решение для обработки соединений запрошенного URL-адреса для сканирования и гиперссылок соответственно на этот URL-адрес.
func joinURLs(baseURL, hyperlink string) string {
parse, err := url.Parse(hyperlink)
if err != nil {
return ""
}
base, err := url.Parse(baseURL)
if err != nil {
return ""
}
nextURLToCrawl := base.ResolveReference(parse)
return nextURLToCrawl.String()
}
Лучшее в этой функции - то, что она может обрабатывать функции, которые находятся в другом домене, без необходимость проверять, является ли имя хоста одинаковым или нет. Теперь ваш код гораздо более декларативен.