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
а почему не работает с апи?
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
🅞leksiy
🅞leksiy
🅞leksiy
Сорян, я с телефона, отредачил для примера
🅞leksiy
Небуферизированный элемент не учитывается, я же написал выше
🅞leksiy
Если там выше убрать число в make, то len все время будет 0
Gosha
всё понял, спасибо!
ILIA
ILIA
Крым?
ILIA
Не важно чей, гугл сервисы там не работают
ILIA
И ответ там именно так же.
ILIA
ILIA
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/
Herman
Herman
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
То есть капасити формально увеличивается, но по факту это целая аллокация, смена указателя и тд