@gogolang

Страница 273 из 1630
Alexey
25.05.2017
06:29:56
основной код в файле commits.go Вот прежде всего что меня интересует: — глобальные переменные, правильно ли я поступил вынеся var bot *tgbotapi.BotAPI неред c main(), сделав bot доступным во всех функциях — файловая структура проекта, правильно ли я разбил код по файлам — как лучше запускать и билдить проекты: go run commits.go types.go github.go gitlab.go выглят как-то каряво... и такая же команда по build... — commits.go слушает входящие реквесты от gitlab http.HandleFunc("/gitlab", gitlabHandler), но прийти на этот индпоинт может все что угодно. Какой нибудь спам и пр.. Как обрабатывать такие ошибки? Просто возвращать return c каким-то ответом сервера, если не распарсим json? или как-то по другому обычно поступают? decoder := json.NewDecoder(req.Body) var api gitlab err := decoder.Decode(&api) if err != nil { panic(err) }
и остался вопрос 1 попрос к моему сообщению выше: — глобальные переменные, правильно ли я поступил вынеся var bot *tgbotapi.BotAPI неред c main(), сделав bot доступным во всех функциях

Brown
25.05.2017
06:33:11
Я сам плохо отношусь к глобальным переменным, считаю это зло, считаю лучше передавать в функцию, но у вас это вроде набор функций верно?

https://www.bsuir.by/m/12_100229_1_98218.pdf

вот тут страница 347

Google
Alexey
25.05.2017
06:35:42
ну я поэтому и спрашиваю. Есть общее мнение, что глобально что-то задачать плохо... но вот в этому случае, если bot нужно вызывать не из main, то мне пришлось бы его передавать сначала в func github() потом из нее с func publish

Brown
25.05.2017
06:36:29
в пдф страница 347 в книге 326

Alexey
25.05.2017
06:36:29
какие еще есть способы решения таких вопросов кроме: - глобальных переменных - передачи в функцию

Brown
25.05.2017
06:37:27
Это 2 подхода, глобальная плоха тем что не ясен цикл ее жизни, не понятно когда она создана, какое у нее состояние и тд

То что я скинул подробно расписанно когда использовать

там 2-3 страницы

Alexey
25.05.2017
06:38:18
но третьего подхода нету? какой-то альтернативы, так?

там 2-3 страницы
читаю, спасибо

Brown
25.05.2017
06:39:11
Ну если это просто какой то сервис менеджер, в котором нет никаких состояний, то думаю можно, хотя я бы не стал

Alexey
25.05.2017
06:41:48
Ну если это просто какой то сервис менеджер, в котором нет никаких состояний, то думаю можно, хотя я бы не стал
в моем случае bot - это объект обертки над телеграм api я объявляю переменную глобально. В main ее определяю. // Telegram var err error bot, err = tgbotapi.NewBotAPI(token) if err != nil { log.Fatal(err) } и потом в других местах ее использую bot.Send(msg)

Brown
25.05.2017
06:43:32
Кстати оч класная книга, считаю обезательной к прочтиению

Google
Brown
25.05.2017
06:44:05
У меня в бумаге 2016 г

Brown
25.05.2017
06:44:22
В электронке только 2012 находил

разницы там особой нет

Ivan
25.05.2017
07:35:47
У меня есть глупый вопрос. У меня есть задача где всё время приходится мапы "объединять". Ну т.е map[string]int , суммировать значение по совпадающим ключам, добавлять отстуствующие. Сейчас сделано как for k,v:=range m2{ m1[k]+=v } вря ли тут что то ещё можно придумать, но это так часто происходит, что уже ужастно тормозит. Нет ли случайно каких то советов, как это улучшить? Может хранить иначе, другие структуры. Задача примерно как считать частотность слов в тексте. И такие мапы приходят как будто с разных параграфов и текстов.

i
25.05.2017
07:40:49
может string на числовое значение попробовать заменить

что-то вроде кодов хаффмана

Ivan
25.05.2017
07:43:44
помойму не выйдет же. если отельно справочник вести то мне в том справочнике пополнять

i
25.05.2017
07:45:17
Вроде бы у гугла была какая-то супер быстрая хэш таблица, может через cgo сделать

Ivan
25.05.2017
07:45:36
не помните имён?

i
25.05.2017
07:46:37
http://incise.org/hash-table-benchmarks.html

Ivan
25.05.2017
07:47:48
Спасибо, понятия не имею как это юзать, но гляну

i
25.05.2017
07:49:54
На C++ переключиться, а результат в go отдавать :)

Ivan
25.05.2017
07:50:41
эх

может какие нить волшебные базы бывают

что б туда мэпы передавать а оно там как нить паралельно

мне даже синхроннывй ответ то не нужен

i
25.05.2017
07:51:43
Кстати, может попробовать распаралелить

Ivan
25.05.2017
07:52:18
Вынести хранение куда нить, и поставить фоновый процесс пусть себе объединяет

i
25.05.2017
07:54:05
Не думаю, что у go для этого можно много оптимизаций придумать, если только распараллелить

Google
Ivan
25.05.2017
08:34:49
1. Значения не сортированы 2. Обычно один меп сильно больше другого по размеру (аккумулирует данные) поэтому я делаю range по меньшему 3. Ключи по размеру все одинаковы, и рандомны. Хорошая аналогия слова в тексте. 4. Элементов десятки тысяч

Daniil
25.05.2017
08:35:38
Если нет - плохо. Можешь посмотреть как в яве у строки подсчитывается хэш

Сразу же вопрос, а в го можно задать в мапу кастомный компаратор или объявить таковой для типа данных?

Brown
25.05.2017
08:37:23
не то но примерно

Daniil
25.05.2017
08:38:15
Но можно хранить строку и хэш к ней рядом. Есть маленькая надежда что го сначала сравнит хэш а потом строку

Тогда взлетит)))

Ivan
25.05.2017
08:46:05
Четсно говоря я про этот хеш вообще не понимаю

у меня там просто map[string]int

я сам хеши никакие не считаю ж

Daniil
25.05.2017
08:47:15
я сам хеши никакие не считаю ж
Ну надо погуглить считает ли го и в какой момент

Напиши на си/плюсах

Ivan
25.05.2017
08:49:04
эти циклы объедитнни я мепов (сотни их) сжирают время

293.28s 25.45% 25.45% 293.28s 25.45% runtime.memhash 216.45s 18.79% 44.24% 467.58s 40.58% runtime.mapassign1 186.18s 16.16% 60.40% 187.92s 16.31% runtime.mapiternext 149.46s 12.97% 73.37% 398.52s 34.59% runtime.mapaccess1_faststr 67.65s 5.87% 79.24% 1106.82s 96.06% validator.(*MetricString).Combine

Google
Илья
25.05.2017
08:53:17
http://jmoiron.net/blog/go-performance-tales/

если упирается именно в производительность map, то, и правда, придется переходить на int

Brown
25.05.2017
08:54:30
Я думаю это просто выделение памяти

Daniil
25.05.2017
08:54:51
если упирается именно в производительность map, то, и правда, придется переходить на int
Но если после сравнкния хэша на инте нельз сравнить и саму строку - бесполезное чтото получается

Ivan
25.05.2017
08:56:47
хеш на интах подразумевает же словарик где то ряом, так ведь?

Илья
25.05.2017
08:58:34
хмм, да, но по нему бегать так часто не придется

по идее

Ivan
25.05.2017
08:58:51
ну пореже, да.

Daniil
25.05.2017
09:03:23
Так а как мапа на го работает кто-нибудь вкурсе?

Ivan
25.05.2017
09:08:14
откуда ж

nk2ge5k
25.05.2017
09:15:40
https://golang.org/src/runtime/hashmap.go

Ильдар
25.05.2017
09:59:29
Кстати, интересно. Dropbox начинали свою разработку на Go, потом отказались от него. Почему?

Mike
25.05.2017
09:59:43
Например, посмотрели на цены инженеров

Alexander
25.05.2017
09:59:53
А когда они успели отказаться?

Ильдар
25.05.2017
10:00:33
Недавно был на докладе, там говорилось, что они от него ушли, или частично отказались.

Alexander
25.05.2017
10:00:53
А ссылку можно?

Daniil
25.05.2017
10:03:40
Ivan
25.05.2017
10:04:24
Да, верно, все ж открыто

Google
?FLERRY?
25.05.2017
13:54:33
Ребята, вот как правильно сделать: есть реп на гитхабе, в котором лежит один проект. Но на Java. Сейчас этот же проект я полностью переписал на Go со всеми улучшениями и дополнениями. Эту, так скажем v2.0 запихнуть в тот же реп в другую ветку или в новый реп?

?FLERRY?
25.05.2017
13:55:46
понял, спасибо :)

Ivan
25.05.2017
13:56:15
понял, спасибо :)
не за что! Обращайся еще ?

?FLERRY?
25.05.2017
13:57:30
??

Alexei
25.05.2017
14:20:57
я тоже за новый реп, реп2 )

?FLERRY?
25.05.2017
14:22:04
:D

новая жизнь

репорт кард оценил в NOT BAD

осталось комменты проставить и A+ будет :D

golint постоянно ругает за них, подлец

Илья
25.05.2017
16:40:10
а в проекте написать ABANDONED DEPRECATED PLEASE LEAVE!

?FLERRY?
25.05.2017
17:18:39
?

Прямо капсом

Спасибо, кстати, за советы :3

Dmitriy
25.05.2017
17:35:40
Добрый день. Не подскажите? В golang планируются дженерики в новых версиях?

Ivan
25.05.2017
17:36:24
нет

Страница 273 из 1630