
Kirill
27.03.2017
13:05:31

ainu
27.03.2017
13:07:14
access control имеется в виду бизнес-логика (допустим Вася не омжет смотреть товар с ID=15) или просто врубить-отрубить?
"UsePre registers middleware before any other middleware. Use only for metrics or access control!"

Kirill
27.03.2017
13:08:46
врубить, отрубить, "все из 4.0.0.0/8 не могут смотреть ничего вообще, ибо в бане", "этот вася сделал слишком дохрена запросов в секунду, идет он в пень"

Google

ainu
27.03.2017
13:09:16
А, понятно
В общем разберусь попробую сделать статью по аналогии с этой: https://scotch.io/tutorials/create-a-single-page-app-with-go-echo-and-vue
только вместо echo gramework, а вместо vue - react

Kirill
27.03.2017
13:10:00
конечно, можно еще geoip какой-нибудь вкрутить и т.д.

ainu
27.03.2017
13:10:01
Спасибо еще раз.

Kirill
27.03.2017
13:10:31
тестить буду на реактике, на остальное времени не хватит

Mehti
27.03.2017
13:49:48
кто чем пользуется для миграции бд? интересует mysql

Aleksandr
27.03.2017
13:55:45

Alexey
27.03.2017
13:56:10

Mehti
27.03.2017
13:56:30
список библиотек у меня есть, интересует личный опыт каждого

Aleksandr
27.03.2017
13:57:24

Alexey
27.03.2017
14:09:44

Google

Alexey
27.03.2017
14:12:37

Mehti
27.03.2017
14:13:43
нужно смигрировать mysql, поменяли формат записи дат и нужно сделать миграцию

Igor
27.03.2017
15:01:33
господа, а echo - норм выбор для API-фреймворка, если хочется кококо хайлоад?
или есть что-нибудь сильно удобнее-быстрее?
(ну, gin часто ставят рядом, имеет ли смысл его тыкать или вкусовщина?)

Vladimir
27.03.2017
15:02:25
Народ, а помогите разобраться с context'ами в Go. Сделал простейший пример их использующий, но что-то не могу получить Value обартно: https://play.golang.org/p/bjTkkprk6w
Вероятно я где-то что-то не так делаю, но не понимаю где

Denis
27.03.2017
15:25:00
надеюсь поможет разобраться

Vladimir
27.03.2017
15:25:47
надеюсь поможет разобраться
увы нет, локально передается, но я не понимаю почему делая http запрос с WithContext я его не могу прочитать на получающей стороне (точнее почему он всегда контекст по-умолчанию)

Denis
27.03.2017
15:29:29
контекст не кодируется в реквестах в хттп заголовки
как я понимаю вы это ожидаете ?
с одного сервера на другой контекст не передается
если это нужно кодируйте и декодируйте через мидлварь

Vladimir
27.03.2017
15:32:09

Denis
27.03.2017
15:32:52
там в доках когда пишут об айпиай запросах подразумевают api клиентских либ, а не рест и тому подобное
у меня для этого запросы принимают структуру Metadata
map[string]string
что кодируется в хедеры

Vladimir
27.03.2017
15:34:06
@pifagorych я тогда не понимаю назначения WithContext у http.Request

Denis
27.03.2017
15:34:46
ну контекст сам по себе не о данных
а о cancellation

Google

Denis
27.03.2017
15:35:23
отмена запроса, таймауты, вот все это

Vladimir
27.03.2017
15:36:58
Ок, печально.

Denis
27.03.2017
15:38:42

Vladimir
27.03.2017
15:40:51
Да, понятно. Но в общем как то странно ч кажется передать этот map должно было бы быть просто

Denis
27.03.2017
15:47:24
ну велью может быть любая сложная структура не только строка
как ее декодировать

Vladimir
27.03.2017
15:53:06
А как принято сейчас значения из контекста кодировать при передаче по хттп?
В смысле передавать в заголовках или еще как?

Denis
27.03.2017
16:10:32
Если это хттп то да
Можно просто слегка автоматизировать процесс
Через мидлварь все заголовки с опр префиксом собирать в metadata
Ну и наоборот структуру metadata при реквестах разбирать в хттп заголовки с опр префиксом


ainu
27.03.2017
19:03:45
@kirilldanshin а есть аналог servefile? Идея в том, чтобы для всех адресов "/*any" отдавать один и тот же file.html
Вместо этого:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "static/app/index.html")
})
Окей, фиг с ним, делается.
Другое непонятнее.
Я хочу по адресу /static/* отдавать яваскрипты из папки, а по всем остальным - один и тот же html
app := gramework.New()
//Отдать css и javascript
app.GET("/static/dist/", app.ServeDirNoCache("./static/dist/"))
//favicon
app.GET("/favicon.ico", app.ServeDirNoCache("./static/"))
//На все запросы отдать одинаковый html
app.GET("/*", func(ctx *fasthttp.RequestCtx) {
ctx.SetContentType("text/html; charset=utf8")
result, err := ioutil.ReadFile("./static/app/index.html")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
ctx.Write(result)
})
app.ListenAndServe(":8084")
panic: wildcard route '*' conflicts with existing children in path '/*'
чяднт?


Igor
27.03.2017
19:58:43
а как ты себе представляешь разруливание роута /foo, если он по двум маскам матчится?

Google

ainu
27.03.2017
20:00:56
Представляю? Элементарно. Как nginx. Первый приоритет прямой путь, второй не прямой.
Или тот кто раньше тот приоритетнее.
Другой вариант - это невозможно без switch/case.
Когда GET("/*any") только один оно конечно красиво выглядит
Но должен же быть способ элементарно фавиконку отдать?
Окей, вот челендж
app := gramework.New()
//На все запросы отдать одинаковый html
app.GET("/*any", func(ctx *fasthttp.RequestCtx) {
ctx.WriteString("Yay!")
})
//Кроме фавиконки
app.GET("/favicon.ico", app.ServeDirNoCache("./static/"))
app.ListenAndServe(":8084")
Задача описана кодом (пусть неработающим)

Denis
27.03.2017
20:05:51
Зачем тебе вообще gramework?

ainu
27.03.2017
20:05:59
Очень хочу, чтобы я чегото в этом не понимал

Admin
ERROR: S client not available

Denis
27.03.2017
20:06:06
Тоже проблемы с перфомансом?

ainu
27.03.2017
20:06:24
чтобы был уровень абстракции. проблем с перфомансом нет совсем-совсем
Я с чегото решил что он (роутер) разрулит собственно что надо и что не надо
Ну как бы на то он и роутер

Denis
27.03.2017
20:08:20
Либе месяц ема
Возьми гориловский мюкс
Эхо
Джин

Igor
27.03.2017
20:08:33

ainu
27.03.2017
20:08:43
Я ожидал нечто вроде
app.GET("/static", "./static")
app.GET("/api/*", handler)

Igor
27.03.2017
20:08:55
но да, мб можно было бы лучше сделать

Google

Denis
27.03.2017
20:13:07
абстракции на уровне роутера не нужны
что там абстрагировать-то

ainu
27.03.2017
20:13:34
Тут три варианта. Первый: кейс с фавиконкой нельзя без switch/case сделать.
Второй: можно просто я туплю
Третий: зачем тебе фавиконка/отдавай фавиконку через другой путь/отдавай апи через другой путь/ты не умеешь готовить
Правильный ответ второй - все таки можно
app := gramework.New()
app.GET("/static/dist/*static", app.ServeDirNoCache("./"))
app.GET("/favicon.ico", app.ServeDirNoCache("./static/"))
app.NotFound(func(ctx *gramework.Context) {
//.....
ctx.Write(result)
})
всё, заработало.

Kirill
27.03.2017
20:33:47
мне предлагали уже сделать алиасы на эту тему

ainu
27.03.2017
20:52:43
Сделал
Получилось лаконичнее чем было
https://pastebin.com/Erejt8V8 - оба варианта старый и новый

Semen
27.03.2017
20:55:14
Друзья. Я в Go совсем новичек. Но в другом языке разбираюсь не плохо. Хочу освоить Go. Кто в силах, подскажите какие в моем коде явные косяки, в какую сторону смотреть. Если не сложно. Спасибо.

Kirill
27.03.2017
20:55:55
а, вижу
вот. go get -u и будет так, как ты хотел)
ощущение какой-то слишком уж запутанности

ainu
27.03.2017
20:59:16

Kirill
27.03.2017
20:59:35
ctx.HTML()
vs
ctx.SetContentType("text/html; charset=utf8")

ainu
27.03.2017
21:00:31
А, понял, круто