@gogolang

Страница 868 из 1630
Kirill
27.02.2018
14:27:20
и зависит всё от того, что решит компилятор

это не зависит от того, что ты лично думаешь, что может быть произойдет, а может и нет

Alexander
27.02.2018
14:27:43
не что решит компилятор, а что написано в исходниках

а там написано - вернуть слайс, указывающий на тот же буфер

Google
Kirill
27.02.2018
14:28:10
ты ссылку кидал на strings, а не на компилятор

Monday Begins on Saturday
27.02.2018
14:29:18
Кто был на Badoo'шном митинге. Доклады уже выложили где-нибудь?

Kirill
27.02.2018
14:29:23
и отказываешься понимать, что _компилятору_ решать, как будет работать в реальности код. да, он даст эквивалентную логику, но может сам смотреть, как именено, потому что строки иммутабельны и он может сложить в .readonly, а может и нет

Alexander
27.02.2018
14:31:12
компилятор не волшебник, он делает то, что написано в программе. А в программе _нет_ копирования буфера при вызове string.Trim

О чем я и сказал в самом начале

Kirill
27.02.2018
14:31:45
спасибо, так лучше :))

хотя нет, гоню, нужен другой способ

Илья
27.02.2018
14:36:04
да, тут же просто указатель на структуру, и он всегда разный

Alexander
27.02.2018
14:36:05
Да, это структура, описывающая строку скопировалась.

Илья
27.02.2018
14:36:14
нужно вытащить указатель на блок данных ?

meehalkoff✪
27.02.2018
14:36:25
какой то подтекст?)

Илья
27.02.2018
14:39:23
https://play.golang.org/p/7JIfsW3vEyW

Google
Alexander
27.02.2018
14:40:37
?

Evgeniy
27.02.2018
14:40:46
т.е. получается реально одна строка, но с разной длиной?

прикольно

Alexander
27.02.2018
14:42:08
https://play.golang.org/p/DNiDotpJNDn - а вот пример с TrimSpace

Kirill
27.02.2018
14:42:56
нужно вытащить указатель на блок данных ?
говорю же, прогнал) отправил, а потом понял, что ансейфом нужно было приправить)

https://play.golang.org/p/DNiDotpJNDn - а вот пример с TrimSpace
да, это я уже понял, я тестил на более старой версии, где происходило копирование

Alexander
27.02.2018
14:45:34
Trim прямо копировал строку? Это странно, конечно, ну да ладно. Кстати, это пример, почему иммутабельные строки - это хорошо. Можно делать вот такие выкрутасы с подстроками очень эффективно.

Илья
27.02.2018
14:46:31
хм, а как в этом случае GC определит, что блок данных можно освободить? :S

или я туплю?

Alexander
27.02.2018
14:47:36
GC просто умный :) Я не знаю, как он работает, но, думаю, не освобождает блок, пока ссылки на него есть.

Илья
27.02.2018
14:47:57
(As an aside, there is a well-known gotcha in Java and other languages that when you slice a string to save a small piece, the reference to the original keeps the entire original string in memory even though only a small amount is still needed. Go has this gotcha too. The alternative, which we tried and rejected, is to make string slicing so expensive—an allocation and a copy—that most programs avoid it.)

не умный

?

вообщем нет, я не туплю ?

Виктор
27.02.2018
14:59:24
Он не умный но вы умнее. Так что вы сами должны знать когда вы имеете дело с большой строкой и маленькой подстрокой а когда строка небольшая и можно оставитьв мпамяти)

Классика же)

Aleksandr
27.02.2018
15:07:46
https://golang.github.io/dep/

не видел раньше - у dep сайт появился

John
27.02.2018
15:08:49
не видел раньше - у dep сайт появился
Ну как сайт ... страничка, картинка, и несколько кнопок )

Google
Aleksandr
27.02.2018
15:09:16
а что еще там должно быть? доки да ссылка скачать

John
27.02.2018
15:09:27
хм... и правда, доки есть

Думал, ссылка на wiki на гитхаб будет ))

Илья
27.02.2018
15:10:38
они месяц назад сделали доку

https://golang.github.io/dep/blog/2018/01/23/announce-v0.4.0.html

The
27.02.2018
15:20:05
где хранить пул коннектов? вот у меня есть пакет database, в нем есть connect() который устанавливает соединение и Get() который возвращает *sql.DB, это нормалная реализация? Или нужно делать вот эту структуру с Env: куда ложить логгер, db, и прочее?

The
27.02.2018
15:24:54
пул коннектов я имею ввиду sql.DB, там же внутри есть уже пул

короче, где хранить *sql.DB

вот что я хотел узнать)

The
27.02.2018
15:26:43
ну т.е., у меня есть хендлеры, и в них передавать *sql.DB? а чем плохо database.Get().Query() делать?

ну или database.Get() и погнал

Alexey
27.02.2018
15:26:56
пул коннектов я имею ввиду sql.DB, там же внутри есть уже пул
Есть, и установить ограничения сразу, чтобы базу на отторжение лишних не наталкивать

Marlik
27.02.2018
15:28:04
короче, где хранить *sql.DB
Вот образец, за код не пинать, первая прожка на го. https://github.com/MarlikAlmighty/examplefasthttp

Alexey
27.02.2018
15:28:30
Зачем Get? database.DB.Query()

The
27.02.2018
15:29:12
Зачем Get? database.DB.Query()
ну а инициализацию как сделать? Допустим, база ещё не поднялась. но приложуха уже должна что-то отвечать

пока sql.Open() поинтер будет нил, и потом будет race condition

Google
Alexey
27.02.2018
15:29:58
Есть init

The
27.02.2018
15:30:19
init блочит же

Marlik
27.02.2018
15:30:34
Инит лучше не юзать.

Димка
27.02.2018
15:30:57
init блочит же
где можно поподробней почитать?

Alexey
27.02.2018
15:31:07
Инит, да, плохо. Или заранее, прочитать конфиг, соединение с базой сделать

The
27.02.2018
15:31:41
где можно поподробней почитать?
напиши в init time.Sleep(time.Second * 60)

Marlik
27.02.2018
15:31:42
Да вон же наверху ссылка, написано криво, но смысл там понятен, там всего два файла.

И пока прога не проинициализируется, нахрена ей отвечать что-то?

The
27.02.2018
15:32:55
Admin
ERROR: S client not available

The
27.02.2018
15:33:18
она должна отвечать ошибкой и не копить их, ну или копить пока не треснет

Marlik
27.02.2018
15:33:55
Нихрена не понял, у тебя нет соединения с базой, нет ничего, но уже есть коннекты?

The
27.02.2018
15:34:14
ну да, люди долбят сайт

Alexey
27.02.2018
15:35:08
ну да, люди долбят сайт
Пока с базой не соединишься никуда всё-равно не поедешь

Marlik
27.02.2018
15:36:09
Смотря как сайт стартует, если без бэкенда стартует то хз, так-то пока бэкенд не готов нехер чото делать. Пусть бэкенд сначала стартует, генерит шаблон сайта, подрубается к БД, а потом и обрабатывать запросы можно.

Alexey
27.02.2018
15:36:57
Сперва читаем конфиг, пусть пока долбят, мы их не слушаем. Согласно конфигу соединяемся с базой и т.п. мы никого не слушаем, зачем? Потом поднимаем хттп сервер

Те кто долбят моргнуть не успеют как это всё произойдёт

Или база на марсе?

The
27.02.2018
15:38:37
проблема в том, что если база упала, а перед Go нету ничего (например, Nginx), то сайт будет валяться как труп

нужно отобразить какую-то ошибку

Google
The
27.02.2018
15:38:47
если ставишь вперед nginx

то он копит в пул соединения, если твой сокет или порт начинает отвечать

но тогда пул разростается, вариант с тем чтобы читать конфиг и валятся мертвяком с nginx спереди приемлем.

Marlik
27.02.2018
15:39:30
Ну дык если упала база, фактически и бэкенд накрылся, тада фронтенд должен ошибку отобразить.

The
27.02.2018
15:39:34
тогда nginx будет отрисовывать ошибки

Alexey
27.02.2018
15:39:48
Какой пул?

Нет базы после старта, отвечай 500

Но коннект уже настроен, он будет реконектиться сам

Andrey
27.02.2018
15:41:12
Каждый день удивляюсь предметам спора в этом чате

Alexey
27.02.2018
15:42:39
Я ж ведь даже и не спорил

The
27.02.2018
15:49:15
Вопрос изначально был о том, где хранить *sql.DB. В init() не вариант. Прямой доступ тоже как-то плохо. Что мешает где-то по тупняку сделать db = nil? Делаем Get() возвращающий поинтер на *sql.DB и connect() который коннектится к базе и подменяет поинтер через atomic.SwapPointer, чтобы гонки не было. Или я не прав?

Alexey
27.02.2018
15:49:16
Это даже лучше не слушать пока все инициализации не пройдут. Человек открывает страницу, а у него полосочка загрузки начинает медленно передвигаться, он не уходит пока у тебя приложуха стартует, секунд 20 ждёт, энжи также делает прежде чем 500 отдать. Потом у тебя запустился сервер и всем отдал инфу. А если ты сразу всем отдашь 500, а потом начнёшь конфиг читать, не все вернутся потом за инфой. Да и порт на котором принимать запросы разве не в конфиге?

И ты перед каждым запросом коннект типа поднимаешь?

Илья
27.02.2018
15:51:10
мда, записывайтесь к Василию на курс вообщем

Alexey
27.02.2018
15:51:30
И больше не ешь эти грибы

Andrey
27.02.2018
15:56:47
Интересный вопрос. Если я в переменной храню указатель и в миллионе горутин его читаю, но только в одной пишу. При этом мне не важно прочитался старый указатель или новый. Состояние гонки может повредить указатель при одновременном чтении и записи и надо лочить?

Alexey
27.02.2018
15:57:21
go-database-sql.org вот это хорошо читать

Stanislav
27.02.2018
15:57:44
go-database-sql.org вот это хорошо читать
Лучше вообще про рейсы почитать, наверно

Alexey
27.02.2018
15:58:24
Лучше вообще про рейсы почитать, наверно
Это я про предыдущую тему о базе

Stanislav
27.02.2018
15:59:10
В гошечке одновременное чтение будет тебе триггерить варнинги про рейсы и у тебя твои миллион горутин повесят нахрен все)

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