
Mike
17.03.2017
11:12:44
вот тебе пример
где по по заголовку что-то определяется

Andrew
17.03.2017
11:14:45
круто конечно. А если мне перед тем, как пользователю отдать файл, нужно проверить права доступа, достав их из БД?

Google

Mike
17.03.2017
11:16:05
еще раз, это реверс прокси, а не сервер
он выполняет КАКИЕ-ТО проверки
бизнес логику туда тащить не стоит
скорее типа если поисковик пришел, то отправь его на пререндер
если пользователь с телефона — ан сервер с мобильной версией
если с компа — на полную
мб редиректы какие-то и т.п.

Andrew
17.03.2017
11:18:10
Получается выбор - писать конфиг для nginx и логику go, либо всё на go.
Для моих 300-строчников лучше всё в одном месте на одном языке...

Mike
17.03.2017
11:19:37
лучше разделять сущности, конфиг — это про другое, он про интеракции пользователя с твоими ресурсами, перенаправление хттп->хттпс и т.п., на го должна быть бизнес логика, не привязанная к домену и т.п.
для 300 строчников можно делать ВООБЩЕ что угодно, лол
я-то про продакшн логику сейчас
когда все разрослось и следить за этим тяжело

Google

Mike
17.03.2017
11:20:20
если у тебя свалка
и не пойми где что и сколько раз менять, когда ты с амазона переезжаешь в диджтал оушен и домен решил поменять
или когда у тебя 4 лэндинга потому что маркетологам так хочется, а по сути они одинаковые и только урлами отличаются

Andrew
17.03.2017
11:21:28
А когда разрослось и ещё весь проект в десятке сопутствующих компонентов, тоже наверно сложно.

Mike
17.03.2017
11:22:40
ну вот у меня сейчас проект на десяток-другой тысяч строк кода (правда в основном это фронт), и это разделение обязанностей просто панацея, когда для каждого рода проблемы ты знаешь, какой инструмент за это отвечает и не лопатишь весь код, а только это
тем более конфиг нгинкса редко занимает больше 2 экранов
а то и одного

Andrew
17.03.2017
11:25:43
А если вам предложат nginx в виде либы на go?

Mike
17.03.2017
11:26:51
зачем? это системный сервис не пересекающийся с моим кодом. если я захочу выкинуть север на го и переписать его на ноде или питоне или произвольном_супер_языке_будущего, то я буду менять только этот компонент, а остальные останутся
микросервисы ftw
у нас есть отдельно апи сервер с данными, отдельно сервер мобильной версии, полной и лэндинга
каждый заменяем без сайдэффектов для других
и в какой из них нгинкс как либу добавлять?)

Andrew
17.03.2017
11:28:18
Во все :)

Mike
17.03.2017
11:28:27
воот
а потом чтобы что-то поменять, в каждом менять?

Semyon
17.03.2017
11:28:45
Я иногда не понимаю, Андрей троллит или ой

Mike
17.03.2017
11:28:51
(домен замечу один, неплохо бы иметь одну точку входа)
*или гой

Semyon
17.03.2017
11:29:06

Google

Andrew
17.03.2017
11:30:14

Semyon
17.03.2017
11:30:51

Andrew
17.03.2017
11:30:57
у меня только простые проекты за плечами, мне видится, что всё в одном месте и на одном языке - это круто

Semyon
17.03.2017
11:31:40

Daniel
17.03.2017
11:32:08

Mike
17.03.2017
11:32:24
но вообще имхо если ты пишешь на го, лучше писать чистый рест, а нгинкс и прочая лабуда — головная боль фронтэндера
(сказал фронтэндер)

Andrew
17.03.2017
13:14:01
Реакт и ноду? Чёртов интернет сделал из меня фанатика Go. И писать просто, и скорость выполнения просто улёт даже на плате с arm процом.

Mike
17.03.2017
13:15:08
зато ВСЕ на одном языке, и бэк, и фронт, и твоя мамаша

Andrew
17.03.2017
13:15:19
А с реактом у меня ассоциация - десктопное ПО, жрущее оперативу как целый Chrome... Если это будущее - я сойду с этой планеты ?

Eduard
17.03.2017
13:23:55

Max
17.03.2017
15:49:05
привет, скажите как узнать или текущая рутина главная?
у меня есть функция которая что-то делает, и иногда она вызывается как go func() иногда как func() внутри нужно делать mutex.lock() для певрого случая и не делать для второго, как из различить?

Alexander
17.03.2017
15:53:53
добавить параметр?

Max
17.03.2017
15:56:56
прям явно func(isMainRoutine) как-то косолапо
нет возможности сделать что-то типа if rouine.IsMain() {} else {}
?
у меня 1780 вызовов этой фуфнкции))) с добавлением параметра я буду неделю обновлять вызовы)

Google

Andrew
17.03.2017
16:04:18

Max
17.03.2017
16:05:22
те же яйки - мне нужно будет перелопатить куча кода что бы где-то переписать ивызывать вторую а где-то оставить как есть

Andrew
17.03.2017
16:06:18
Ну-с, код сам себя не напишет ))

Max
17.03.2017
16:09:19
просто мне кажется вроде это должно быть както решаемо - понять в какой рутине я нахожусь сейчас, или как минимум в главное или нет

Олег
17.03.2017
16:13:49
Для го такая задача нетипична, официального API нет. Можно передавать аргумент в функцию, выполняющую работу, как говорили выше.
А если знать: главная горутина или нет, - нужно где-то глубоко по стеку вызовов, то стоит пересмотреть свою архитектуру :)

Max
17.03.2017
16:18:02
согласен, наверное архитектура кривая... буду рефакторть..

dobro
18.03.2017
04:27:21
http://www.opennet.ru/opennews/art.shtml?num=46212

Мерлин
18.03.2017
06:07:47
@dobrois, привет, давно не виделись!
Было :3

Roman
18.03.2017
15:09:03
Привет всем.
Подскажите, что-то не могй найти
есть форма <form id='newuser-form' method='post' action="/create">
Возможно ли как-то получить ее id?

Mike
18.03.2017
15:10:08
Да, добавить его в input type="hidden"

Roman
18.03.2017
15:10:30
понял, спасибо

$continue$
18.03.2017
15:54:58
привет всем. Каким образом в Golang без костылей можно конвертнуть 1/5 (к примеру) в hex?

Мерлин
18.03.2017
16:46:39

Mikalai
18.03.2017
18:31:58


Stanislav
18.03.2017
19:22:29
Всем доборого времени суток :)
Решил на основе этой статьи освоить вебсокет :
https://m.habrahabr.ru/post/226469/
После перечитывания статьи решил сделать все сам, по памяти.
Я по аналогии создаю комнату. В ней ссылки на все коннекты по вебсокету, канал для отправки сообщения всем коннектам, канал для удаления коннекта из комнаты.
Дальше я пускаю в горутине следующее:
for {
select {
case message := <-r.Send:
for client := range r.Players {
select {
case client.send <- message:
default:
close(client.send)
delete(r.Players, client)
}
}
case client := <-r.Leave:
if _, ok := r.Players[client]; ok {
delete(r.Players, client)
close(client.send)
}
}
}
Но после этого моя программа входит вступор при попытки отправить что-либо в любой из каналов этой комнаты. Видимо по тому, что не канал не готов на прием.
Почему?)
Спасибо)


Daniel
18.03.2017
19:26:31
вообще - это сильно, закрывать канал сразу после того, как из него не удалось прочитать очередную порцию
но проблема не в этом - писатель бы падал при попытке записи в закрытый канал

Google

Stanislav
18.03.2017
19:30:25
Убрал закрытие канала. Все равно ничего не происходит.

Daniel
18.03.2017
19:32:19
так это
а код целиком?
в гист, к примеру

Stanislav
18.03.2017
19:35:40
все, я оказывается забыл иницилизировать этот канал)

Hoto-Hoto
18.03.2017
23:48:48
Всем привет!
Нужна помощь,
Пишу rest api на go, использовал github.com/emicklei/go-restful .
Столкнулся с тем, что кол-во "ресурсов" может увиличеться, и каждый надо импортировать в одну точку входа и регистрировать.
Возможно ли реализовать динамическую загрузку?
Т.е добавил новый ресурс и там же его зарегистрировать.

Roman
19.03.2017
00:30:20
кому нибудь известны группы по ИИ ?

Dorian
19.03.2017
00:39:00
AI ?

ainu
19.03.2017
06:18:04
Это надо искать ML
Не думаю что найдется
В addmetu techsparks бывают обсуждения этой темы между тоннами флуда

Sergey
19.03.2017
07:25:46

Favoretti
19.03.2017
08:50:00

Dmitry
19.03.2017
10:24:31
Коллеги, добрый день!
Пилю свой pet project выходного дня (естественно на go) и у меня назрел вопрос.
Есть сервис, который на get запрос отдает массив json объектов в пользовательское приложение. Пользователь должен выбирать один из объектов и дальше этот объект нужно сохранить в бд. Как в данном случае лучше валидировать то, что пришло от пользователя? Хочется, чтобы объект, который пришел обратно на сервер, соответствовал одному из объектов, изначально переданных пользователю.
Есть мысль считать хеш от каждого объекта в массиве и хранить соответствие (запрос->массив хешей) какое-то время.
Возможно есть более элегантное решение?

Мерлин
19.03.2017
10:36:31

Dmitry
19.03.2017
11:25:49
Тогда получается, что нужно кешировать у себя все объекты с id. Вопрос получает лишь во времени кеширования

Альберт
19.03.2017
11:50:08
Всем примет) Посоветуйте, как лучше организовывать содержимое пакетов? Например у меня внутри пакета есть несколько сущностей(структура), у каждой сущности есть набор одинаковых "статических" методов, например Extract. И приходится все функции именовать следующим образом UserExtract(), ContractExtract(). Так все делают или разбивать пакет на суб пакеты? Но с субпакетами получается рекурсивная зависимость пакетов...

Mike
19.03.2017
11:50:54
Интерфейс экстрактор тебе в помощь