Это не проблема регэкспов и даже не проблема го. Проблема растет из недопонимания как работает используемая библиотека - она скачивает страничку и выдает ее частями, дергая callback несколько раз. А Вы думаете что обрезается верхняя часть страницы )) Используйте net/http, это ведь совсем не сложно - res, _ := htt.Get("example.com"); body, _ := ioutil.ReadAll(res.Body)
>man time
FORMAT: Maximum resident set size of the process during its lifetime, in Kilobytes.
Максимальное количество скушанной памяти
Количество потоков - 1.
еще раз "прикопаюсь": что будет для str = "_HHELLOHHELLOHHELLOHHELLOHHELLOHHE"? :-D
в этом случае надо делать еще один цикл, i для начальной позиции, j для конечной позиции, и k для поиска слова str[i:j] в оставшейся подстроке. Сложность O(n^3), что применимо только для небольших строк, и крест на этом методе
да. вот тут (habrahabr.ru/post/163979/) товарищ подошел к делу серьезно, и сделал репу с парсерами. Я посмотрел у себя, gokogiri выдает для 4х "эталонов" ~190, 7, 175, 166 страниц в секунду (логи тут: pastebin.ru/Hon1RKkK). Так что даже если парсить страницы наподобие page_habrahabr-70330.html (1,6Мб), то такой машинки будет все равно достаточно.
можете брать vps/vds, допустим, у того же digitalocean, можете пойти в облака на aws или gae, вполне вероятно что на начальном этапе это будет даже проще и дешевле. советовать какую-то вещь типа "бери вот эту марку вот этого производителя" вредно без знания проекта, вдруг у вас по памяти как раз все шоколадно будет, а про процу overhead.
а кнопку пробовали нажимать? )) что пишется в консоли, где вы запускаете go run remote.go? что пишется в консоли браузера? добавьте обработку ошибок в execute:
func execute(cmd string) {
parts := strings.Fields(cmd)
head := parts[0]
parts = parts[1:len(parts)]
out, err := exec.Command(head, parts...).Output()
if err != nil {
println(err)
}
print(string(out))
}