DDer: тут дело не в создании экземпляра. Уж не знаю как в вашем любимом C#, но обычно это выгляит так:
1. вы создали объект, у него есть методы (встроенные переменные)
2. судя по вашей схеме работы с данными (я про код, а не про логическую схему сверху, ибо её я не стал смотреть) у вас часть переменных в объекте обычные, а часть сами по себе объекты, у которых тоже есть методы
3. я указал не на создание нового объекта, а на присвоение вложенного объекта некой переменной по которой обращаться быстрее, так как не нужно идти по цепочке
4. дальнейшая работа со встроенным объектом идёт напрямую с ним, где бы он не находился.
Уверен в C# это работает точно так же как и в других языках программирования. Я вам просто на упрощение кодонаписания указал.
Владимир Грабко: если форкните репозитарий, то адрес у него поменяется, будет например такой github.com/vGrabko99/runner
Если просто git clone то адрес будет прежний, github.com/mantyr/runner и import использовать нужно будет именно его.
Имейте в виду что этот репозитарий для меня, я могу в любой момент поменять API, что-то удалить или что-то добавить.
Логика адресации при использовании пакетов примерно такая:
import a "github.com/mantyr/runner"
func main() {
a.IsFile()
a.GetHash()
}
"работа с template (а именно формирование данных в цикле и встройка в шаблон)"
"работа с веб сокетами."
Это, как понимаю, из того что хотелось бы увидеть?
Вебсокеты отлично описаны в https://github.com/gorilla/websocket/tree/master/e...
Работа с html/template на самом деле более полно описан в https://golang.org/pkg/text/template/
Циклы - это обычный range, описан более чем доступно тут https://golang.org/doc/effective_go.html#for (правда на английском языке), к нему ещё добавить что итерировать можно из chan, но это вы и сами разберётесь.
По поводу циклов и шаблонов, у меня есть пример в другом репозитарии https://github.com/mantyr/iterator/ там как раз циклы, chan, оперирование в шаблоне...
Могу только по портянкам подсказать:
Company c = new Company();
c.About.Name = "Travel";
c.About.Description = "Touristic company";
Countries countries = c.About.Contacts.Address.Countries[0];
countries.Name = "123";
... и дальше тоже раскройте, незачем городить лесенку:)
Владимир Грабко: подскажите какие решения пригодились и какие бы хотелось увидеть ещё. Я в целом собираю хороший код и формирую свою кодовую базу для своих проектов, часть кода выкладываю.
Владимир Грабко: Ретурн был по поводу "2. Как остановить выполнение любой фун-ции в любом месте?"
На самом деле ничего не мешает делать каскады ошибок, приведу пример. Есть некая функция которая работает с другими функциями и что-то делает, на выходе она либо выдаёт результат и отсутствие ошибки, либо собственно ошибку.
import "errors"
func MyFunc(param string) (i int, err error) {
a, err := Func1(param)
if err {
return
}
b, err := Func2(param)
if err {
return
}
if a > b {
i = 10
return
}
err = errors.New("a <= b")
return
}
При этом возвращаются уже определённые переменные и в любой части кода видно что будет в ошибке, а что в значении.
return
Поработайте над опрятностью кода, будет и вам проще и работать лучше. Когда формируете вопрос - предоставляйте все необходимые данные. О том что вы используете стандартный database/sql можно толко догадаться. О том что у вас за объект status глобальный тоже не известно. А так - допишите проверку как хотели.
Владимир Грабко: спасибо, посмотрим. Заработает или нет в Mac - отпишусь. У вас в каких операционках работает? Что ещё посоветовать можете для доступа к оборудованию? (применительно к Mac в большей степени).
yarofon: если вы совсем не использовали Rust то говорить об отзывах и совершенстве Rust как-то преждевременно.
По поводу Golang - посмотрите видео с прошедшего недавно митапа в Санкт-Петербурге. Golang даёт хорошие цифры производительности - всё остальное в этом вопросе в общем-то чепуха.
yarofon: по отзывам такое судить нельзя:) Совершенен в чём?:) Вы на нём писали? Он же вырвиглазный, в этом плане Golang проще и простота побеждает, а скорость со временем в Golang нарастает и к синтаксису и правилам это уже не относится.
Если у кого есть ссылки о том как получить звук с микрофона в Mac OS в Golang (через core audio или как-то ещё) - напишите в комментарии к этому вопросу, будьте любезны. Интересует именно работа с устройствами (микрофон, динамики, прочее)
Получил сообщение 21 октября: "Что касается API. У нас есть 7 готовых "наборов" данных, которые мы готовы предоставлять. Так же вы можете собрать собственный набор из любых 4 типов данных.
А = основные факты + рейтинг
B = основные факты + рейтинг + рецензии
C = основные факты + рейтинг + расписание
D = основные факты + рейтинг + синопсис
E = рейтинг
F = расширенные факты + рейтинг
J = собственный набор из любых N типов данных к фильму (кажется, 4-5 достаточно)
где
основные факты = название (ru) | оригинальное название | год | страна (все) | режиссер | жанр (все) | актеры | время (хрономтераж) | возраст (ограничения в ru)
расширенные факты = основные факты + слоган | сценарист | продюсер | оператор | композитор | монтаж | премьера (мир) | премьера (по гео пользователя) | актеры (ТОП-N?) | синопсис | постер"
Что больше ни с кем они не общаются и новостей вообще нет?
Сергей Протько: в том-то и дело. Вы говорите "работа с сетью не медленная", я говорю "работа с сетью медленная". Я от вас ожидаю какой-то интересной информации, вы от меня ожидаете какой-то интересной информации. Dead Lock :)
Сергей Протько: вы считаете что работа с сетью в PHP быстрая? Взять хотя бы теже голые сокеты. Если сеть (физическая) сама по себе медленная, то оочень не хочется добавлять собственный оверхед. Более того, если качать надо тот же xml файлик на 1+ гигабайт, то очень хочется его и качать и анализировать в несколько потоков одновременно. Это сразу уменьшение с 10 минут до примерно 3-4 минут. Цифры не с потолка, столько времени занимает что бы скачать и на лету обработать всё тот же приведённый файл на 3.7 гигабайта. Отдаётся там файл действительно медленно.
Понимаете в чём дело, я отстаиваю производительность и эффективность, вы же отстаиваете просто PHP как таковой, дескать он нам нравится и потому можно закрыть глаза на то в каких сценариях он медленный и даже очень. Оно, конечно, понятно, но что если мне Golang синтаксис нравится не меньше чем синтаксис PHP? Что если Си не такой уж и страшный... в чём смысл тогда на PHP то сидеть. Лично для себя особо не вижу, а после появления многих фишек в Golang'е то и подавно - считай тот же объектный язык где объекты делать не зазорно по производительности. (Про то какой ООП в Golang это отдельная тема, как по мне так считай идеальный или почти идеальный).
Сергей Протько: несколько сумбурно. Вы упёрлись в алгоритм в PHP или в Java? Вот пример моего "подобного" случая.
Мне нужен был crc32 содержимого файла, но не абы какой, а совпадающий с тем видом crc32 что использовался в одном стороннем приложении. В результате в PHP это работало через crc32a и crc32b наложенные друг на друга (я уже честно не помню как именно) и стопка файлов мегабайт-так на 100 выполнялась минут десять... переписал на Си алгоритм вычисления crc32 и стал получать результат мгновенно (меньше секунды, со скоростью чтения диска считай).
Для меня после перехода на Golang все задачи связанные с данными на PHP это как есть кактус - раньше не замечаешь, а теперь уже и не хочешь. Отношение к коду меняется.
Сергей Протько: ну, в общем, у нас разный опыт и потому он... банально отличается. Для моей работы лишний цикл, лишний такт и лишний оверхед - это ресурсы и потеря в производительности. По этому Golang стал отличным переходом с PHP и Си.
"он чистит все как только мы потеряли ссылку на объект (когда ref counter == 0)."
Откуда же вообще тогда в лимиты по памяти попадаем? Топикпастер явно говорит - вот часть работы парсер проитерировал, а больше не может. Что он между итерациями ссылки не удалил? Я удалял, но это даже профилированием как попало работало (я про величину потребления памяти на большом количестве однотипных итераций).
Сергей Протько: у топикпастера работает хорошо до 50 страниц, а ему надо как минум в 10 раз смаштабироваться.
"и почему вы считаете что это не работает для PHP" просто долго именно так и делал, писал большие парсеры на PHP, знаю что пакетная обработка один из немногих способов решить часть проблему. И как бы там в теории движок PHP не работал - напарывался на проблемы которые описал и много больше.
Вот пара причин почему всё может упасть не по вашей вине:
1. вы используете сложную библиотеку код которой вы либо не в состоянии прочитать либо не в состоянии найти там проблемные места (как пример движок парсинга DOM элементов)
2. вы посмотрели весь код и вроде там нет исключений, но исключение прилетело из одного из компонентов который где-то глубоко использовался
"почему-то джависты не жалуются что у них надо все что выплевывает исключение оборачивать в try/catch, так же как и любители node.js. Так чем PHP должен отличаться?"
Из личного опыта, пробовал запустить проект на node.js связанный с парсингом, сразу влетел в исходники net библиотеки, где такой треш что проект сразу ушёл в Golang где прекрасно и живёт.