Kirill
нет, не я один, а один тот, кто ревьювит
Daniel
и это правильно
Daniel
демократия оказалась фуфлом :(
Kirill
да вот именно. ее слишком легко подделать.
Oleg
Это довольно странно, нуок.
Kirill
да вот получается лучше всего так
Kirill
вообще, если приходит PR и я не могу придумать use-case, то я даже ревьювить не берусь
Kirill
и без меня найдутся люди, которые отревьювят
Kirill
к слову о реддите, там уже катарас залетал, похоже. кто-то заминусил.
Slava
давно уже залетал, по наитию @alek_si
Slava
правда Лёша потом риторику менее агрессивную стал применять
Slava
завместо crazy
Slava
Кто будет на хайлоаде?
Alexey
я буду
Alexey
Alexey
https://www.reddit.com/r/golang/comments/4psfzq/katarasiris_author_is_crazy/
Constantine️
Alexey
Ну это witchhunt, по сути
Constantine️
если с этой точки зрения, то ага )
Мерль
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
А можно ли в го как-то разделить дебаг и релиз версию, и в релиз версию не включать определенный логгинг. Ну чтобы совсем, как #ifndef _NDEBUG ? Я погуглил - нет нельзя, но может мое гугл-фу требует тренировки
Oleh
в ините функцию опредилить?
Kirill
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
@kirilldanshin а оно такое debug.Println(expensiveCallToGatherInformation) проглотит?
Kirill
Kirill
и оно умеет показывать откуда оно вызвано
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Т.е не будет функцию сначала исполнять, правильно?
Kirill
оно в сборке выпилится вместе с просчетами аргументов
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Круто! посмотрю на досуге, спасибки
Kirill
для логирования места вызова нужно использовать dlog.WithCaller{}. для дебаг сборки нужно -tags debug использовать.
A.
[last news]
Gocui – Minimalist Terminal Application Toolkit for Go
A.
Хрен знает почему, но люблю такие штуки
Alexey
🏳️ Phil
Слушайте, а никто не страдает "чтобы мне такого на go сделать, чтобы потренироваться"?
🏳️ Phil
Хочу алгоритмы ГОСТ, чтобы встравивалисб в стандартный crypto. с прицелом на принятие
Alexey
и я хочу
Мерль
Идея для пакета
Мерль
В Go нормальнуые сортировки завезли, ура!
Daniel
a?!
Daniel
о чем речь?
Мерль
о чем речь?
https://github.com/golang/go/commit/22a2bdfedb95612984cec3141924953b88a607b7
Constantine️
завозят, а не завезли )
Constantine️
пока релиза с ней нет — не завезли
Daniel
но завезут же
Daniel
это дело
Constantine️
ага )
Мерль
Знаете, что было бы неплохо?
Мерль
Стэк и очередь в стандартной библиотеке
Alexander
а зачем они могут понадобиться, если есть https://golang.org/pkg/container/list/
Alexey
стек – слайс, очередь – канал
Alexey
Поскольку это конструкции языка, то они типобезопасны, без interface{}
Oleksii
Затестим как Telegram форматирует code block. Это список популярных Web Framework'ов для Golang, которые я знаю.
##### GitHub stats at 2016-10-18
repo stars forks lang
go-martini/martini 8790 923 Go
astaxie/beego 8444 2082 Go
gin-gonic/gin 7817 875 Go
revel/revel 7416 1042 Go
labstack/echo 5611 426 Go
codegangsta/negroni 4058 325 Go
julienschmidt/httprouter 3849 354 Go
zenazn/goji 3166 222 Go
gorilla/mux 2887 443 Go
hoisie/web 2760 418 Go
gorilla/websocket 2619 441 Go
ant0ine/go-json-rest 2529 270 Go
emicklei/go-restful 1817 273 Go
googollee/go-socket.io 1417 202 Go
go-macaron/macaron 1254 140 Go
gocraft/web 1135 82 Go
gocraft/web 1135 82 Go
bmizerany/pat 983 102 Go
rcrowley/go-tigertonic 943 78 Go
go-zoo/bone 941 60 Go
pilu/traffic 487 19 Go
lunny/tango 482 68 Go
ngmoco/falcore 454 41 Go
Alexey
kataras/iris 5517 321 Go
Alexey
https://github.com/kataras/iris/commit/ed6fc57b0dc071373e6d14585ffa0e38ebe8dfd3#diff-04c6e90faac2675aa89e2176d2eec7d8R42
Constantine️
ахахаха
Constantine️
как бы не звучало, но чел наглый как русский и хитрый как еврей
Oleksii
@alek_si Спасибо, но после того как я узнал что автор Iris творит на GitHub - поставил на него личный бан.
Alexey
Тоже способ
Oleksii
Народ, а что делает этот код?
https://github.com/gin-gonic/gin/blob/master/context.go#L53
https://github.com/cyberj/chi-v2/blob/master/context.go#L12
Alexey
проверяет интерфейс компилятором
Oleksii
Ага. Проверяет что интерфейс в Framework совпадает с stdlib? Спасибо.
Alexey
Проверяет что их Context реализует context.Context
Alexey
Я обычно в коммент пишу в таких случаях
// check interface
var _ fmt.Stringer = new(Config)
Oleksii
Решил пройтись по самым звездным Golang web framework'ам. Пока смотрю исключительно на сигнатуры HTTP hander'ов. Потом надо будет глянуть на middleware, request data bind и т.п.
HTTP handlers. signatures
—---------------------—
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { // negroni and standard net/http
g.Get("/", func(w http.ResponseWriter, req *http.Request) { // zenazn/goji and standard net/http
g.GET("/", func(c *gin.Context) { // gin
e.Get("/", func(c echo.Context) error { // echo
m.Get("/", func() string { // martini
r.GET("/", func Index(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { // julienschmidt/httprouter
w.Get("/", func(ctx *web.Context, val string) { // hoisie/web
w.Get("/", func(val string) string { // hoisie/web
m.Get("/", func(ctx *macaron.Context) (int, []byte) { // macaron
m.Get("/", func(w http.ResponseWriter, req *http.Request, log *log.Logger) { // macaron
NOTEs
! revel, beego are not idiomatic Go because they forces you to embed handler to the Framework's struct
- martini, hoisie/web, macaron handlers are not strongly typed due to reflective dependency injection (which leads to poor performance)
- negroni and standard net/http does not dispatch request by HTTP verb (more boilerplate code)
+ goji, echo, gin, julienschmidt/httprouter handers are stronly typed
+ goji, echo, gin, julienschmidt/httprouter do dispatch requests by HTTP verb
+ goji, echo, gin support HTTP middleware
? julienschmidt/httprouter does not support HTTP middleware, gorilla/handlers are recommended instead
? goji keeps handler interface standard but it's quite verbose to type. Consider
? echo handers returns error value which could be handled in next middlewares in the chain. Consider
INF labstack/echo has own router, supports most handler / middleware APIs
INF gin uses julienschmidt/httprouter, per-request context map
INF negroni recommends gorilla/mux router; Golang 1.7 context can be used (or gorilla/context for Golang < 1.7)
- gorilla/context uses global context map which may lead to lock contention
+ Golang 1.7 context uses per-request context map, Request.WithContext does a shallow copy of *Request
Мерль
Решил пройтись по самым звездным Golang web framework'ам. Пока смотрю исключительно на сигнатуры HTTP hander'ов. Потом надо будет глянуть на middleware, request data bind и т.п.
HTTP handlers. signatures
—---------------------—
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { // negroni and standard net/http
g.Get("/", func(w http.ResponseWriter, req *http.Request) { // zenazn/goji and standard net/http
g.GET("/", func(c *gin.Context) { // gin
e.Get("/", func(c echo.Context) error { // echo
m.Get("/", func() string { // martini
r.GET("/", func Index(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { // julienschmidt/httprouter
w.Get("/", func(ctx *web.Context, val string) { // hoisie/web
w.Get("/", func(val string) string { // hoisie/web
m.Get("/", func(ctx *macaron.Context) (int, []byte) { // macaron
m.Get("/", func(w http.ResponseWriter, req *http.Request, log *log.Logger) { // macaron
NOTEs
! revel, beego are not idiomatic Go because they forces you to embed handler to the Framework's struct
- martini, hoisie/web, macaron handlers are not strongly typed due to reflective dependency injection (which leads to poor performance)
- negroni and standard net/http does not dispatch request by HTTP verb (more boilerplate code)
+ goji, echo, gin, julienschmidt/httprouter handers are stronly typed
+ goji, echo, gin, julienschmidt/httprouter do dispatch requests by HTTP verb
+ goji, echo, gin support HTTP middleware
? julienschmidt/httprouter does not support HTTP middleware, gorilla/handlers are recommended instead
? goji keeps handler interface standard but it's quite verbose to type. Consider
? echo handers returns error value which could be handled in next middlewares in the chain. Consider
INF labstack/echo has own router, supports most handler / middleware APIs
INF gin uses julienschmidt/httprouter, per-request context map
INF negroni recommends gorilla/mux router; Golang 1.7 context can be used (or gorilla/context for Golang < 1.7)
- gorilla/context uses global context map which may lead to lock contention
+ Golang 1.7 context uses per-request context map, Request.WithContext does a shallow copy of *Request
Echo - one love
Constantine️
ага )
Constantine️
эхо прям хорош
Constantine️
другого и не хочется ))
Vladimir
https://github.com/pressly/chi
Oleksii
Мне нравится echo и gin, вот только не могу понять насколько удобно иметь или не иметь вот такую сигнатуру?
> e.Get("/", func(c echo.Context) error { // echo
> echo handers returns error value which could be handled in next middlewares in the chain. Consider
Alexey
_очень_ удобно
Alexey
Мы говорили об этом в http://golangshow.com/episode/2015/11-26-031/
Oleksii
@alek_si Спасибо, обязательно послушаю. Скажи, а где-то есть пример в виде кода. Как говорится лучше один раз увидеть, чем сто раз услышать.
Alexey
У меня весь код с echo проприетарный. Примеры в echo смотрел?
Мерль
Добрый день
Мерль
https://www.youtube.com/watch?v=nRCXS6PUr5c&utm_source=golangweekly&utm_medium=email
Мерль
А ещё годнейший тур по каналам http://blog.mergermarket.it/now-youre-thinking-with-channels/?utm_source=golangweekly&utm_medium=email
Vladimir
О. Это ж Андреас на фотке.