Anonymous
а, ну паника будет разумеется
Anonymous
два раза пытаюсь зароутить корень
Anonymous
panic: http: multiple registrations for /
Herman
ну сделай /api
Herman
и запрос на /api
Anonymous
?
Anonymous
а понял
Herman
у меня не паникует
Herman
а где ты два раза роутишь /
Herman
или это при запросе?
Anonymous
да, сделал все норм
Anonymous
да я тупанул сорян
Anonymous
но гет-ы не приходят до сих пор
Anonymous
почему то хендлеры не видит
Anonymous
такое ощущение
Anonymous
я могу запушить на гит
Anonymous
если так легче будет
Herman
странно как-то
Herman
такссс
Herman
идет барацьба за роут / и выигрывает кто первый
Herman
поменять местами и норм
Herman
а почему не работает с апи?
Herman
а
Anonymous
так ты же сам только что ответил
Herman
ну с апи не работает потому что оно к тому дописывает
Herman
как я понимаю придется писать так
Herman
не вижу в горилле никаких Group
Anonymous
о заработало
Anonymous
гений герман
Anonymous
спасибо
Herman
видимо для гориллы правильно так
Herman
func main() { router := mux.NewRouter() api := router.PathPrefix("/api").Subrouter() api.HandleFunc("/getAllSongs", aaa).Methods("GET") api.HandleFunc("/makeNewPost", aaa).Methods("POST") router.PathPrefix("/").Handler(http.FileServer(http.Dir("../templates"))) log.Fatal(http.ListenAndServe(":8080", router)) }
Maks
Несколько наблюдений по докеру: 1. юзать compose_project_name удобно особенно когда есть микросервисная архитектура и хочется удобочитаемые, понятные, структурированные имена контейнеров 2. Юзать хостнейм удобно, когда к некоторым контейнерам нужен доступ извне, при этом имена сервисов докер композ файл в разных проектах совпадают. 3. Всегда юзайте волюмы если есть возожность вместо дефолтного)))) так удобнее менеджить место на диске. Знаешь какой вольюм к чему привязан тупо по префиксу и имени.
Maks
В основном это касается локальной разработки, так как в деплое там иначе немного делается)
Maks
В чем была проблема. Во первых докер схавал 120 гигов памяти волюмами и старыми имаджами, которые пруном не очищались. Волюмы имели название в большинстве своем просто хеш. Было почти не возможно идентифицировать волюми и их контейнеры, так же было жутко не удобно вспоминать названия сервисов для общения между друг другом Что я делал: я планировал по новой развернуть локально 9 микросервисов. В каждом свои енв и докер композ файлы. В композ файлах имена контейнеров, а в енве не было compose_project_name, из за чего имена контейнеров начинались с названия папки в качестве префикса, а имена сервисов именовались как например billing-nginx, billing-php. В итоге имена контейнеров были хаотично названы и можно было спутать с личным проектом. billing_billing-php. А общение между контейнерами было по имени сервиса если они были в одной сети локальной. То есть по billing-nginx например. Что я сделал: во первых добавил в каждый проект в енв файл compose_project_name=company_service Например vk_messages В композ файле убрал префиксы к контейнерам и дал им короткие имена(php, nginx, postgres) В итоге при сборке я получаю вольюмы для проекта имеют префикс compose_project_name. Как и дефолтная сеть если не будет секции networks. То есть я имею такие контейнеры: vk_messages_nginx, vk_messages_php vk_billing_nginx vk_billing_postgres Vk_billing_php Сети по типу: vk_mesaages_default vk_billing_default Аналогично происходит с волюмами. При этом в докер композ мы пишем обычные понятные имена без префиксов, и при этом не будет пересечения с другими сервисами. Для общения между контейнерами, я в сервисах докер-композа указал hostname для каждого сервиса: hostname: “$(compose_project_name)-service” Например services: php: hostname: “$(compose_project_name)-php” nginx: hostname: “$(compose_project_name)-nginx” И теперь из других сервисов в общей сети я могу обращаться по понятному мне хосту, который принадлежит только одному контейнеру из за префикса, так как просто php могли бы пересекаться с другими контейнерами.
Null
Как проверить тип переменной во время создания на языке Go https://uproger.com/kak-proverit-tip-peremennoj-vo-vremya-sozdaniya-na-yazyke-go/ @Golang_google
🅞leksiy
Там и есть switch в первом примере, а вот перевод... 🤦‍♂ "В го есть специальная форма переключателя..." 😂😅
Gosha
Только начинаю погружаться в каналы, почему когда заходим в squares длина канала 3, когда должна быть 4(main горутина заблокировалась при c<-4, но положила значение в канал)? И при первых двух итерациях длина 3, хотя мы считали данные из канала и длина уменьшиться должна помогите плиз https://go.dev/play/p/mOM37_McC35
Gosha
Почему 4, если make(chan int, 3), по сути речь о длине занятого буфера
тогда не понятно, почему в цикле 2 раза длина 3. Получается, когда мы делаем c<-4 мы блокируемся до того как положили(длина 3) и идём в squares. далее мы считываем 1,2,3 потом канал пуст -> потом кладём 4 и возвращаемся в цикл?
🅞leksiy
Сорян, я с телефона, отредачил для примера
Gosha
https://go.dev/play/p/2uSBGMEH7Lf
вот, у тебя тож два раза длина 3) я наверное не понимаю, в какой момент в канал добавляется 4
🅞leksiy
Небуферизированный элемент не учитывается, я же написал выше
🅞leksiy
Если там выше убрать число в make, то len все время будет 0
Gosha
всё понял, спасибо!
ILIA
Крым?
ILIA
Не важно чей, гугл сервисы там не работают
ILIA
И ответ там именно так же.
ILIA
http://localhost:8080/getAllSongs
попробуй http://localhost:8080/getAllSongs/?param1=value1
George
Подскажи, ты это вручную набирал или как вывел?
Есть тьма тулзов: https://ascii-tree-generator.com/ https://asciiflow.com/#/ https://textik.com/
Q
добрый вечер. есть у кого опыт с Amazon SP-API ?
Herman
Ой
Herman
Ну просто не на хабре опрос
Bagasl
Ой
Леново незаслуженно мало набрал, а в целом все правильно
Bagasl
А, там десктопы. Лан, тут я хз
Herman
А, я не заметил
Anonymous
десктопы от леново, делла, хр?
Herman
Мне кажется он сам не знает, о чем спрашивает
Herman
Это ж ленкедин
Anonymous
linkedin moment
Bagasl
Лови деда
Alexey
Камрады, как вам опросник Даниила Подольского: https://docs.google.com/spreadsheets/d/1U6AEqXkvXz5tzsBATd-1D_o_8NHwkNKOxJiwDwkEzvY/edit#gid=0 ? В своей статье на хабре он уверяет, что "коллеги, вы меня огорчаете". Какие вопросы на ваш взгляд там реально сложные или , как будто бы очевидные, но с подвохом (предлагаю пока смотреть на колонку для middle)?
Artur
Народ, кто-нибудь стажировался в WB, че скажете?
Alexey
Меня смущает вопрос про lock-free структуры в Go: вроде бы встроенных нет.... А вдруг таки есть? И как работает append. Простой ответ - расширяет емкость (при необходимости) и добавляет значение, Подольского не устраивает 😊
Виталий
а кто такой Подольский?
Виталий
и можно ссылочку на хабр
Alexey
Он говорит, что самый популярный неправильный ответ: «Он увеличивает capacity»
Alexey
https://habr.com/ru/company/oleg-bunin/blog/521582/
Alexey
Ну да, не увеличивает
А что тогда делает?
Alexey
И sync.Map lock-free или нет?
Alexey
Реализация append как если бы она была на Go: func Append(slice []int, elements ...int) []int { n := len(slice) total := len(slice) + len(elements) if total > cap(slice) { // Перераспределяем. // Выращиваем в 1,5 раза новый размер, // чтобы мы могли расти. newSize := total*3/2 + 1 newSlice := make([]int, total, newSize) copy(newSlice, slice) slice = newSlice } slice = slice[:total] copy(slice[n:], elements) return slice }
Herman
А что тогда делает?
Новый массив
Herman
То есть капасити формально увеличивается, но по факту это целая аллокация, смена указателя и тд