🎉
делаешь структуру handler в ней свойство db
Интересно, не пробовал, спасибо.
Alexander
Ну тады мне посоветуйте как быть, есть var db *sql.DB хочу юзать её везде, ибо коннект делается один раз и закрывается база по завершении аппы, так можно глобальную переменную?
а зачем везде ? сделай пакет который работает с бд и коннект будет нужен только в этом пакете. и дергай функции из этого пакета.
Denis
в конструктор я имел в виду. DI как тебе выше говорили
Denis
а зачем везде ? сделай пакет который работает с бд и коннект будет нужен только в этом пакете. и дергай функции из этого пакета.
имхо коннект лучше отдельно делать. иначе тесты неудобно будет писать: все кто дергает функции из этого пакета, автоматически будут дергать реальную базу
Denis
хотя забей, наверное и так можно
Vladislav
type Some struct { data map[string]string } func (s *Some) handler(http.Reqquest ...) { // мапа доступна через s.data }
Спасибо, огромное. Только сегодня начал вникать в методы структур.
🎉
делаешь структуру handler в ней свойство db
То есть по факту у нас будет глобальная структура, внутри неё коннект лежит, и у структуры методы? Я хоть правильно понимаю?
🏁Александр
type handler { connect *db.Connect } func (h *handler) Any(w http.ResponseWriter, r *http.Request) { } ------- handler := &handler{ connect: db } http.Handle("/anyAction/", handler.Any) err = http.ListenAndServe(":8080", nil)
🏁Александр
@MarlikAlmighty
🎉
Я понял, спасибо, но не пойму что это даёт, какой профит?
🏁Александр
ну никаких глобальных коннектов
🏁Александр
вам скорее всего потребуется скинуть еще что-то
🏁Александр
тут легко можно нагружать зависимости далее
🏁Александр
только надо помнить что это многопоточное программирование
🏁Александр
если вы скормите туда скажем type handler { connect *db.Connect myCount int }
🏁Александр
и в handler.Any будете делать h.myCount++ то это будет гонка
🏁Александр
стандартный коннект имеет пул для этой цели
🏁Александр
вам же надо будет юзать мьютексы или sync/atomic
🎉
Чот как-то сложновато...
Nikita
Я понял, спасибо, но не пойму что это даёт, какой профит?
Если в жизни написать хоть один юнит-тест, то становится просто исчерпывающе понятно зачем и почему нельзя хранить состояние в глобальных переменных
🎉
Не глобальный коннект и без этого можно соорудить...
🎉
Если в жизни написать хоть один юнит-тест, то становится просто исчерпывающе понятно зачем и почему нельзя хранить состояние в глобальных переменных
Не понимаю, один хер. Я ведь не про многопоточное программирование, а типа... for { anyfunc1() anyfunc2() } То есть я заранее знаю, как будет работать коннект и все функции, и в какой последовательности... что даст юнит тест не понимаю... хотя надо почитать что это ))
Nikita
Как вы вообще работу находите не умея писать юнит-тесты?
🎉
А я безработный и мне ндра))
Aleksandr
Как вы вообще работу находите не умея писать юнит-тесты?
в очень редких кейсах нахождение работы связано с написанием юнит-тестов. в 80% контор тебя даже не спросят об этом, в 15 спросят и обучат если надо
freezlite
лучше все работать на полный день, пол дня
freezlite
и с дома
freezlite
считай безработный
freezlite
но еще и платят
Great
небольшой опрос, статистики и великой справедливости ради есть проект у проекта есть конфиги, база там, бакет, редиса адрес, рэббита там, вот этого всего есть окружения - тест там, прод, препрод, локал разрабов, и тд на какое окружение всё должно быть настроено "по умолчанию", конфиги какого окружения должны лежать в репах?
Denis
https://12factor.net/ru/config
Great
отлично
Pawel
Лок записи и две операции — это будет самый переносимый вариант
Ограничение работает, Это я по тупости запускал скрипт в sqlite, не включив PRAGMA foreign_keys = ON;
heavycharged
господа, а atomic работает с кастомными типами? например, LoadUint32? type MyType uint32
heavycharged
или надо как-то через unsafe мутить?
Daniel
через atomic.Value
heavycharged
через atomic.Value
спс, но я так понимаю тип должен быть не мой кастомный, а именно atomic.Value?
heavycharged
ну точнее, базовый тип не может быть, с обычным присваиванием, как-то так: state = idle
Daniel
коллега, ну почитайте документацию, а?
heavycharged
ок, я понял)
Vladislav
type Some struct { data map[string]string } func (s *Some) handler(http.Reqquest ...) { // мапа доступна через s.data }
А после написания подобного метода структуры вызывать её следует так http.HandleFunc("/", s.handler) ?
Denis
да
Igor
Привет! Первый день на голанге :) подскажите ,как на локали такие вещи разрабатывать? e := echo.New() e.GET("ws://localhost/ws", hello) по такому урлу e.GET("ws://localhost/ws", hello) сервер не работает а по такому e.GET("/ws", hello) работает
Алексей
Из этих 3х книг: 1. Батчер, Фарина - Go на практике 2. Керниган, Донован - Язык программирования Go 3. Марк Саммерфильд - Программирование на языке Go. Разработка приложений XXI что посоветуете почитать новичку в Го, но не новичку в программировании?
Вольти
Начни уже с написания чего то реального - бота для телеги например
Вольти
не успеет 😃
успеет - до 00 часов еще есть время
Igor
А зачем вам e.GET("ws://localhost/ws", hello)
js требует var socket = new WebSocket("ws://localhost/ws"); Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. 'localhost' is not allowed.
Alexander
Из этих 3х книг: 1. Батчер, Фарина - Go на практике 2. Керниган, Донован - Язык программирования Go 3. Марк Саммерфильд - Программирование на языке Go. Разработка приложений XXI что посоветуете почитать новичку в Го, но не новичку в программировании?
если есть опыт, имхо, пройти тур и начинать писать что-то. обычно все вопросы решаются запросом в гугл "how to <do something> in golang". основная проблема новичков именно в программировании - не могут правильно вопрос задать и в поисковик ключевые слова вбить
Igor
А при чем тогда echo?
ххххмммм. это я из примера скачал. теперь вот понимаю что echo лишний :)
Andrei
Ребят, а возможно ли встроить защиту от отладчика в go приложение? И, если да, скиньте, плиз, линк почитать.
Anonymous
upx -d
-d - это же взлом защиты
Илья
Ребят, а возможно ли встроить защиту от отладчика в go приложение? И, если да, скиньте, плиз, линк почитать.
не знаю, что вы подразумеваете под защитой, но можно убрать debug символы и пережать бинарь
Илья
https://blog.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/
Zver
Кому очень надо все равно взломают.
Aleksandr
Zver
Не разберутся в той каше, что генерит гоу компилер. 😏
Zver
Вообще взломать все можно.
Anonymous
Вообще взломать все можно.
Истина. Поэтому нужно писать свой код так мерзко, чтобы прочесть его смог только ты сам.
Aleksandr
Вообще взломать все можно.
но не всем нужно. речь о стоимости взлома, а не о возможности
Zver
но не всем нужно. речь о стоимости взлома, а не о возможности
Ну так это зависит и от кого защищаться будет. Если просто от заказчика, то там может достаточно и отладочную информацию удалить.
Илья
gdb вроде и так может голову сломать, когда под рукой рантайм сменит тред
Zver
Построить всю логику на рефлексии с интерфейсами, а все результаты передавать через каналы и пусть разбираются. 😏
Andrei
А под линем или виндой?
Линь, конкретнее под линь под арм
Zver
-d - это же взлом защиты
Когда-то под виндой можно было какой-то байт или группу поменять, если память не изменяет, и обратно не распаковывал, хотя программа запускалась.