Anonymous
Anonymous
т.е. нафиг :)
Wingman
и харды, подключаемые по сети
Wingman
и с нетворком постоянные траблы
Wingman
ща найду скрины летние мб )
Максим
да хз, смотря под что смотреть, у меня там пара тестовых сервачков, для тестов за такие деньги - сойдет
Wingman
Wingman
ггг
Евгений
спс
heavycharged
heavycharged
там же есть дедики, есть VPS
Евгений
минимальный хвостинг для экспериментов
heavycharged
как минимальный - вполне себе пойдет. я брал VPS который за 3 евро что-ли. не арм который.
heavycharged
но производительность там конечно не ахти, именно что для тестов или для экономии)
Илья
а дайте плз чёнить почитать про бестпрактис по миграциям, схемам, орм в гошке?
орм, как по мне не нужны, можно модельки + squerel + sqlx если хочется сахара - достаточно чтобы сделать модели + реозиторий, с миграциями всё довольно плохо есть https://github.com/mattes/migrate, но мне лично он не понравился, есть https://github.com/db-journey/migrate, я в итогу остановился на github.com/DavidHuie/gomigrate
Anonymous
для всяких тестов обычно хватает арубы за один евро %)
heavycharged
господа, а как писать долгоиграющий веб-сервер, и как его защитить на случай паники? ну т.е., если идет паника, в каком мне месте лучше делать recover{}?
heavycharged
точнее даже не веб-сервер писать, а веб-приложение на базе net/http
heavycharged
и собственно, в самом recover{} что делать, пишем в лог и стартуем http сервер заново?
Alexei
Alexei
а лучше писать так, чтобы не писать recover, увы в команде - это недостжимо )
Илья
heavycharged
Alexander
recover не для всего сервера, а только для обработчика запроса. Тогда просто будет ответ error 500, а сервер жив и работает
Wingman
Alexei
heavycharged
ну вот допустим, знаю что в Go есть баг, когда клиент делает запрос серверу, а сервер отвечает не 200 OK а просто 200, то чуть ниже идет разбиение строки по пробелу, и потом обращение к [1] элементу, но так как ответ пришел 200, то разбив строку мы получаем только [0] элемент в слайсе, а первого нету. и там нету проверки на len, что приводит к панике. К чему я говорю, собственно. К тому, что если есть recover в middleware, а паника началась в самом HTTP, то в таком случае recover уже не сработает, я правильно понимаю?
Wingman
Aleksandr
ну вот допустим, знаю что в Go есть баг, когда клиент делает запрос серверу, а сервер отвечает не 200 OK а просто 200, то чуть ниже идет разбиение строки по пробелу, и потом обращение к [1] элементу, но так как ответ пришел 200, то разбив строку мы получаем только [0] элемент в слайсе, а первого нету. и там нету проверки на len, что приводит к панике. К чему я говорю, собственно. К тому, что если есть recover в middleware, а паника началась в самом HTTP, то в таком случае recover уже не сработает, я правильно понимаю?
не понял в чем баг
Илья
ну вот допустим, знаю что в Go есть баг, когда клиент делает запрос серверу, а сервер отвечает не 200 OK а просто 200, то чуть ниже идет разбиение строки по пробелу, и потом обращение к [1] элементу, но так как ответ пришел 200, то разбив строку мы получаем только [0] элемент в слайсе, а первого нету. и там нету проверки на len, что приводит к панике. К чему я говорю, собственно. К тому, что если есть recover в middleware, а паника началась в самом HTTP, то в таком случае recover уже не сработает, я правильно понимаю?
если это ответ - то это вызов внутри client.Do а на server.Listen , так что вобще непонятно, о чем вы
Anonymous
Anonymous
Опять к нам с этой уродской программой
heavycharged
if resp.StatusCode != 200 {
f := strings.SplitN(resp.Status, " ", 2)
conn.Close()
return nil, errors.New(f[1])
}
heavycharged
сначала бьем строку по пробелу, ожидаемый ответ сервера допустим "404 Not Found", но если сервер ответил "404" то появляется паника. в контексте сервера этот баг не актуален, но кто знает какие ещё бывают паники в самом ядре net.http, я поэтому и спрашиваю, спасет ли от такой паники recover в middleware, и мне почему-то кажется что нет
Kirill
Aleksey
https://www.scaleway.com/ кто пробовал?
У меня там сервачок. По началу был большой процент столенсипию, под 5 процентов скакало, сейчас всегда меньше еденицы. Ну и то что в серых адресах за натом, в этом есть и плюсы и минусы. Ещё один минус что коннект на 25 порт только по большой просьбе наружу открывают.
Anonymous
Wut
Много выше уже объяснял что это такое...
Kirill
Я догадываюсь, что это такое 😄
Anonymous
Всю область заставляют в ней работать
Kirill
Anonymous
Да фиг бы ней., но необходимо по сети работать, а она не может ):
Kirill
А я всё думаю, как достать из экселя с макросами логику обработки данных и переписать на гошку
Kirill
Пока адекватного ничего не придумал
Aleksandr
Anonymous
Еще вам инсайд открою...
Все мед учреждения нашей области заставили с этого года перейти работать на программу Парус., все запросы из нее тупо в открытом виде передаются.
Anonymous
Послушал снифером на шлюзе
Anonymous
Aleksandr
6.1 Status-Line
The first line of a Response message is the Status-Line, consisting
of the protocol version followed by a numeric status code and its
associated textual phrase, with each element separated by SP
characters. No CR or LF is allowed except in the final CRLF sequence.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Aleksandr
вот так написано. что reason phrase опционален не написано
Aleksandr
Aleksandr
распаковывать, читать формулы в xml, много думать
Slach
;) Народ, а кто gometalinter в проектах использует??
есть такой код
list := NewList().AddButton("Button", "postback", "Button Content")
list.AddElement(listElement)
прилетело вот такое
components_test.go:43:⚠️ internal error: no range for "list" (vetshadow)
что конкретно за ошибка я не понимаю
Илья
Aleksandr
сервера почему-то. а бага клиентская.
Илья
какой враппер? middleware?
да, если ошибка на уровне библиотеки ne/http то нет, мидлвар не поможет, сервер упадёт, и за его подъем должен отвечать systemd или кто там у вас за это отвечает, на уровне приложения я бы такое не ловил
heavycharged
Нет, я вам просто привел пример баги, которая возникает в самом HTTP на стороне клиента. Т.е., нет никаких гарантий, что если клиент пришлет запрос не по стандарту серверу, то опять не вылезет какая-то паника. И хочу обезопасить себя от таких случаев, когда кто-то запросит мой сервер не по стандарту.
heavycharged
hypnopumpia
Илья
heavycharged
Aleksandr
эм..
мне так же кажется. в логах периодически вижу паники, а приложение работает
hypnopumpia
Я о том, что описано тут: https://github.com/golang/go/issues/16542
Сейчас, если в одном из хендлеров происходит panic, она автоматически рековериться, а не поднимается на самый верх.
Илья
хммм, ого, не знал про это, тогда паники не будет даже если будет проблема при чтении request // Serve a new connection.
func (c *conn) serve(ctx context.Context) {
c.remoteAddr = c.rwc.RemoteAddr().String()
ctx = context.WithValue(ctx, LocalAddrContextKey, c.rwc.LocalAddr())
defer func() {
if err := recover(); err != nil && err != ErrAbortHandler {
const size = 64 << 10
buf := make([]byte, size)
buf = buf[:runtime.Stack(buf, false)]
c.server.logf("http: panic serving %v: %v\n%s", c.remoteAddr, err, buf)
}
if !c.hijacked() {
c.close()
c.setState(c.rwc, StateClosed)
}
}()
Илья
https://golang.org/src/net/http/server.go
heavycharged
проверил, действительно идет recover.. т.е. middleware тут по сути нужен даже для того, чтобы просто красиво отрисовать страницу и записать в лог/сделать ещё что-то, и даже без него паника где-то в хендлере не убьет сервер.
heavycharged
спасибо за инфу
Илья
зе мор ю ноу
heavycharged
что-то я упустил этот момент, и всю жизнь думал что сервер валится если где-то я накосячу. главное теперь не начать меньше проверок писать))