@gogolang

Страница 272 из 1630
Aleksandr
24.05.2017
13:17:59
ну логично. но почему в шаблоне разные переменные? почему нельзя if'ов наделать итд, и подавать в шаблон стандартную структуру?

у вас что, на разные компьютеры разные шаблоны?

hdhog
24.05.2017
13:18:49
у вас что, на разные компьютеры разные шаблоны?
да, вполне. один скрипт должен збрать лог из пути в котором есть имя ПК или версии ПО. на разных ПК разная версия например. или тот же лог в другом месте. так же для разных пк всегда разные сервера с логами. точнее для групп пк

Google
Олег
24.05.2017
13:20:17
сами переменные тупо строки. не более того.
Я имею ввиду, их можно перечислить? :) 1. PCName 2. UserName 3. LogPath 4. ... Потому что в таком случае можно передавать все возможные переменные сразу, все вместе.

hdhog
24.05.2017
13:20:32
нет. не получится перечислить.

если нужно будет задать переменную которой нет в подгтовленном наборе? тогда что править исходники приложения?)

Мерлин
24.05.2017
13:21:19
нет. не получится перечислить.
Как задаются эти строки? Откуда берутся переменные

Aleksandr
24.05.2017
13:21:45
Мерлин
24.05.2017
13:22:59
их задает пользователь.
Тогда в чём проблема сохранить их копии в структуре?

В слайсе, например?

Aleksandr
24.05.2017
13:23:49
их задает пользователь.
то есть у вас есть заданный набор переменных в шаблонах, которые уже скопилированы, но почему-то нельзя к этому заданному набору привязать одну структуру.

hdhog
24.05.2017
13:24:18
не проблема. шаблон сейчас описывается в yaml. туда можно конечно добавить список требуемых переменных отдельным полем. но тогда есть вероятность того, когда будут готовить шаблон могут забыть указать переменную.

Google
hdhog
24.05.2017
13:25:29
по этому и был вопрос как из шаблона вытащить переменные которые он использует.

Aleksandr
24.05.2017
13:25:31
hdhog
24.05.2017
13:25:38
именно

то есть в идеале хотелось нечто такое получить app --template tmpl.yml --name app --address test а в шаблоне уже start {{.app}} {{.address}}

Олег
24.05.2017
13:27:38
А вдруг подсунут start {{ .template }}? :))

hdhog
24.05.2017
13:28:20
да полюбому подсунут ?

hdhog
24.05.2017
14:42:14
так и делаю)

его надо ведь заполнить правильно ;) чтобы ключи верные были.

hdhog
24.05.2017
14:43:23
думал об этом. как запасной вариант

Илья
24.05.2017
14:45:50
https://golang.org/pkg/text/template/parse/

куда то туда копать

Ivan
24.05.2017
14:46:14
Что то я забыл как математика нам завещала float64 сравнивать на близость

вариант с abs < tolerance мне не нравится потому что там масштабы разные бывают

Илья
24.05.2017
14:48:16
var EPSILON float64 = 0.00000001 func floatEquals(a, b float64) bool { if ((a - b) < EPSILON && (b - a) < EPSILON) { return true } return false }

Ivan
24.05.2017
14:51:00
Mike серьезно?

в жизни такого не видел

Mike
24.05.2017
14:54:59
Не, шутки шучу

Google
Mike
24.05.2017
14:55:07
Серьезно это как выше

Ivan
24.05.2017
14:56:59
с епсилоном то ясно

но я его угадать не могу, у меня там 10^-9 бывает и 10^9

Ivan
24.05.2017
14:58:41
ну смотри, сравниваем два float в один проход там десятьв деввятой значения

в другой проход десятьв минус девятой

данные разные

а эпислон 1

Илья
24.05.2017
14:59:46
для 10-9 придется кастомныйй кейс лепить

Ivan
24.05.2017
15:00:09
я вот думал есть какой нитьь общепринятый способ, вычислить эпсилон налету

или хоть размышления какие

Илья
24.05.2017
15:00:22
но я не сталкивался с такими задачами и не плодил таких общих решений

Ivan
24.05.2017
15:02:30
буду епсилон высчитывать как max / 10^5

типа пять знаков сопадает и баста

Mike
24.05.2017
15:08:01
ну вообще одного должно хватать, ошибка-то обычно не относительная, а абсолютная, и она где-то знаке в 9-10 максимум должна быть, иначе не равны

просто флоаты близкие к нулю это ж вообще трэш тот еще, когда они сами имеют порядок ошибки при умножении/делении

Ivan
24.05.2017
15:17:40
всё так

Серж
24.05.2017
15:43:01
Float - 7 значащих цифр, double - 15. Насколько float'ы близки к нулю - не имеет значения. Есть минимальное принимаемое значение. Ошибка не абсолютная. Регламентировано стандартом IEEE754.

Серж
24.05.2017
15:44:56
я ваш го не знаю

Google
Mike
24.05.2017
15:45:15
догадайся из названия типов, в чем суть

таки погоди, ты сейчас взял стандарт хз чего

Серж
24.05.2017
15:45:32
float64 видимо соотвествует числу с плавающей точкой с двойной точностью

Mike
24.05.2017
15:45:33
го не знаешь

и что-то утверждаешь?

случайное совпадение названия типов не имеет никакого отношения спецификации одного языка к спецификации другого

Серж
24.05.2017
15:46:49
это спецификация представления чисел с плавающей точкой в памяти компьютера

я статью на хабре видел хорошую, сейчас поищу

https://habrahabr.ru/post/112953/

Alexey
24.05.2017
17:20:51
Написал бота который транслирует в телеграм лог коммитов проектов с Github/Gitlab.



Буду благодарен, если у вас найдется время и сможете сделать ревью кода. https://github.com/targence/commits-telegram-bot

Буду благодарен, если у вас найдется время и сможете сделать ревью кода. https://github.com/targence/commits-telegram-bot
основной код в файле 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) }

Олег
24.05.2017
20:02:20
> как лучше запускать и билдить проекты Команда go build (без аргументов) в папке пакета main собирает пакет целиком и кладет бинарник рядом. Не нужно перечислять файлы, это коряво, да :) > прийти на этот индпоинт может все что угодно И гитхаб, и гитлаб подписывают свои запросы к вебхукам, используя его секретный ключ. Вот: https://developer.github.com/webhooks/#delivery-headers И вот: https://docs.gitlab.com/ce/user/project/integrations/webhooks.html#secret-token > Просто возвращать return c каким-то ответом сервера, если не распарсим json? Порядочный веб-сервер должен отвечать в соответствие с протоколом http. Если клиент прислал невалидный json - следует ответить, например, кодом 400 Bad Request. Класть горутину паникой не нужно, можно просто залогировать ошибку.

Mike
24.05.2017
20:05:02
не, 400 — это ваще не понял, невалидный — это 422

Олег
24.05.2017
20:09:48
не, 400 — это ваще не понял, невалидный — это 422
Нужно копаться в документации. 400 должен быть обобщением для любых ситуаций, когда ошибка в запросе клиента, насколько я помню.

Я таки нагуглил :)) Все-таки при ошибках синтаксиса следует использовать 400: https://tools.ietf.org/html/rfc4918#section-11.2

Mike
24.05.2017
20:13:21
ну такое, да. получается что если пришло говно, то 400, а если говно, но в джейсоне — 422

Daniil
24.05.2017
21:52:08
sup

вопрос. Это я невнимателен или в net/http/Server нету никакой обработки умерших соединений?

Google
Daniil
24.05.2017
21:52:15
типо клиент сделал запрос -> мы начали делать супер-дупер-ресурсоемкую работу -> клиент отключился -> мы отвечаем в уже закрытое соединение

хотелось бы поймать этот эвент и отменить всю супер-дупер-ресурсоемкую работу

Илья
24.05.2017
22:12:03
гугли context

и протаскивай контекст в глубину в логике

Daniil
24.05.2017
22:41:04
спасибо

Alexey
25.05.2017
06:25:20
> как лучше запускать и билдить проекты Команда go build (без аргументов) в папке пакета main собирает пакет целиком и кладет бинарник рядом. Не нужно перечислять файлы, это коряво, да :) > прийти на этот индпоинт может все что угодно И гитхаб, и гитлаб подписывают свои запросы к вебхукам, используя его секретный ключ. Вот: https://developer.github.com/webhooks/#delivery-headers И вот: https://docs.gitlab.com/ce/user/project/integrations/webhooks.html#secret-token > Просто возвращать return c каким-то ответом сервера, если не распарсим json? Порядочный веб-сервер должен отвечать в соответствие с протоколом http. Если клиент прислал невалидный json - следует ответить, например, кодом 400 Bad Request. Класть горутину паникой не нужно, можно просто залогировать ошибку.
go build да, понял. но go run commits.go types.go github.go gitlab.go - это нормально? ? Про ответ сервера все понятно, в общем мысли у самого примерно такие же были, хотел просто убедиться, что все верно. Про планы реализации секретного токена есть в readme в разделе todo.

Brown
25.05.2017
06:26:21
go run *

как то так помойму

Alexey
25.05.2017
06:27:03
go run *
go run: no go files listed

Ivahaev
25.05.2017
06:27:19
А это зачем вообще?

Brown
25.05.2017
06:27:22
go run *.go

Ivahaev
25.05.2017
06:27:37
Достаточно один файл, где функция main определена

Разве нет?

Alexey
25.05.2017
06:27:49
go run *.go
да, так работает

Brown
25.05.2017
06:27:55
Alexey
25.05.2017
06:28:00
Разве нет?
нет, так не работает

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