Когда осуществляется вызов метода init()?
Anonymous Quiz
41%
После импорта пакета с определенной функцией init()
5%
Ни один из приведенных вариантов не является верным
21%
Оба приведенных варианта являются верными
33%
Перед функцией main() в основном пакете
👨🏻💻 Реальный вопрос от реального человека
Есть табличное тестирование функции (делал на основании туториалов с официального сайта go). Примечание: Go недавно щупаю.
Условный код:
Если прожать кнопку тестирования несколько раз, то со второго-третьего раза тесты все проходят успешно и больше ошибок не возникает, пока не изменить код. Сначала я думал что дело в vscode, но go test даёт тот же самый эффект.
Пробовал ставить t.Parallel() в главную функцию, не помогает. Есть объяснение что за чародейство и какое решение может быть?
Golang задачи с собеседований
Есть табличное тестирование функции (делал на основании туториалов с официального сайта go). Примечание: Go недавно щупаю.
Условный код:
func TestMyFunc(t *testing.T) {Так вот, у меня в массиве структур порядка 30 позиций для теста, но почему-то возникает ситуация, когда я нажимаю пройти тесты в vscode, некоторые тесты кидают в result просто что-то случайное. Например ожидается какая-то ошибка, но приходит nil, или наоборот, ожидается nil, но приходит ошибка, и третий вариант, ожидается одна ошибка, но приходит совершенна другая(!). При этом корректность функции проверена и точно должна выдавать нужный результат.
testTable := []struct {
name string
input string
want error
}{
{"find_expect_nil", "data", nil},
{"not_find_expect_err", "otherdata", ErrNoData},
}
for _, test := range testTable {
test := test
t.Run(test.name, func(t *testing.T) {
t.Parallel()
err := MyFunc(test.input)
if !errors.Is(err, test.want) {
t.Errorf("input value %s, result: %s, expected: %s", test.input, err, test.want)
}
})
}
}
Если прожать кнопку тестирования несколько раз, то со второго-третьего раза тесты все проходят успешно и больше ошибок не возникает, пока не изменить код. Сначала я думал что дело в vscode, но go test даёт тот же самый эффект.
Пробовал ставить t.Parallel() в главную функцию, не помогает. Есть объяснение что за чародейство и какое решение может быть?
Golang задачи с собеседований
👨🏻💻 Реальный вопрос от реального человека
docker-compose при сборке выдает следующую ошибку:
Мейники лежат по следующей структуре:
cmd/producer/main.go
cmd/consumer/main.go
Два Dockerfile:
docker/consumer/Dockerfile
docker/producer/Dockerfile
Dockerfile consumer:
Golang задачи с собеседований
docker-compose при сборке выдает следующую ошибку:
=> CANCELED [5/5] RUN go build -o consumer-app ./cmd/consumer/main.go 16.7sЗадача запустить два мейника в отдельных контейнерах, но использовать одную и ту же папку для сборки образов.
failed to solve: executor failed running [/bin/sh -c go build -o producer-app ./cmd/producer/main.go]: exit code: 1
Мейники лежат по следующей структуре:
cmd/producer/main.go
cmd/consumer/main.go
Два Dockerfile:
docker/consumer/Dockerfile
docker/producer/Dockerfile
Dockerfile consumer:
FROM golang:1.20Dockerfile producer:
RUN go version
ENV GOPATH=/
COPY ./ ./
RUN go mod download
RUN go build -o consumer-app ./cmd/consumer/main.go
CMD ["./consumer-app/cmd/consumer"]
FROM golang:1.20В docker compose опущу данные кафки и кипера), опишу что касается двух сервисов. docker-compose:
RUN go version
ENV GOPATH=/
COPY ./ ./
RUN go mod download
RUN go build -o producer-app ./cmd/producer/main.go
CMD ["./producer-app/cmd/producer"]
consumer:
build:
context: .
dockerfile: './docker/consumer/Dockerfile'
container_name: "consumer"
ports:
- "8081:8081"
depends_on:
- broker
producer:
build:
context: .
dockerfile: './docker/producer/Dockerfile'
container_name: "producer"
ports:
- "8080:8080"
depends_on:
- broker
Подскажите, что я делаю не так??Golang задачи с собеседований
👨🏻💻 Реальный вопрос от реального человека
Рефлексия и обработка всех структур определенного типа
Пытаюсь реализовать пост-процессинг в проекте, и перед сериализацией в JSON сделать обработку структуры (для ответов API используются разные структуры) с целью конверсии валюты в заданную.
Имеется:
Структура, содержащая цену с валютой
Golang задачи с собеседований
Рефлексия и обработка всех структур определенного типа
Пытаюсь реализовать пост-процессинг в проекте, и перед сериализацией в JSON сделать обработку структуры (для ответов API используются разные структуры) с целью конверсии валюты в заданную.
Имеется:
Структура, содержащая цену с валютой
type Price struct {Структура ответа #1:
Amount decimal.Decimal `json:"Amount"`
Currency string `json:"Currency`"
}
type ExampleRS struct {Дополнительная структура для ответа #2
Total price.Price `json:"Total"`
}
type ResponseEntry struct {Структура ответа #2
ExampleIntValue int `json:"ExampleValue"`
ExampleStringArrayValues []string `json:"ExampleStringArrayValues"`
Price price.Price `json:"Price"`
}
type ExampleListRS struct {
Data []ResponseEntry `json:"Response"`
PerPage uint `json:"Count"`
Pages uint `json:"Pages"`
}
Вопрос - как реализовать метод, принимающий на вход interface{}, или reflect.ValueOf вместо конкретного типа (ExampleListRS или ExampleRS), который будет рекурсивно проходить по структуре, делая проверку на price.Price, и умножающий в ней decimal.Decimal скажем, на 5?Golang задачи с собеседований
👨🏻💻 Реальный вопрос от реального человека
Не работает маршрутизация изображений golang gin
У меня есть загрузка статических файлов на golang, фреймворк Gin.
Но почему-то при запуске всё равно выдаёт 404
Golang задачи с собеседований
Не работает маршрутизация изображений golang gin
У меня есть загрузка статических файлов на golang, фреймворк Gin.
func main() {В html такие пути
// Установка роутера Gin
router := gin.Default()
router.Static("/css", "./css")
<img src= "/css/img/logo3.png">а в самой директории проекта есть папка css, в ней папка img и там изображения.
Но почему-то при запуске всё равно выдаёт 404
Golang задачи с собеседований
В Ozon на Go — 1000+ микросервисов, обеспечивающих работу сайта, склада, логистики, а ещё технологическая платформа и сервисы инфраструктуры.
Звучит интересно? Тогда го в команду Ozon Tech.
Как всё будет?
Ozon приглашает вас на предварительное собеседование, а затем на ивент.
Там вы сможете пообщаться с тимлидами и послушать доклады экспертов.
One Day Offer закончится на афтерпати, а затем вы встретитесь снова уже в качестве коллег.
Если вам нравится этот план, кидайте заявку на странице мероприятия!
Звучит интересно? Тогда го в команду Ozon Tech.
Как всё будет?
Ozon приглашает вас на предварительное собеседование, а затем на ивент.
Там вы сможете пообщаться с тимлидами и послушать доклады экспертов.
One Day Offer закончится на афтерпати, а затем вы встретитесь снова уже в качестве коллег.
Если вам нравится этот план, кидайте заявку на странице мероприятия!
Функция cap() возвращает
Anonymous Quiz
29%
емкость массива
61%
емкость среза
1%
работоспособность
8%
емкость длины
Когда приходится добавлять в стек новый язык, новую платформу, новый сервис или изобретать велосипед в пятнадцатый раз, начинаешь задумываться, как же этот процесс контролировать.
Как раз про это новый выпуск подкаста «Магнитное Поле» – здесь Владимир Дроздецкий, DevOps тимлид Магнита рассказывает про концепцию InnerSource, которая позволяет систематизировать процессы создания новых продуктов и сервисов внутри компании, чтобы не наступать на одни и те же грабли, не изобретать эти самые велосипеды и вообще автоматизировать процессы кикстарта разработки по максимуму.
Это уже шестой выпуск подкаста «Магнитное Поле», который совместно записывают Завтракаст и IT-команда ритейлера Магнит. В предыдущих выпусках обсуждали Data Governance, современные облачные решения и микросервисы, IT HR, ecom, кому нужен agile (а кому не нужен) и многое другое, так что стоит обратить внимание.
🎧 Послушать
📹 Посмотреть
Посмотреть вакансии и отправить резюме: https://magnit.tech
Как раз про это новый выпуск подкаста «Магнитное Поле» – здесь Владимир Дроздецкий, DevOps тимлид Магнита рассказывает про концепцию InnerSource, которая позволяет систематизировать процессы создания новых продуктов и сервисов внутри компании, чтобы не наступать на одни и те же грабли, не изобретать эти самые велосипеды и вообще автоматизировать процессы кикстарта разработки по максимуму.
Это уже шестой выпуск подкаста «Магнитное Поле», который совместно записывают Завтракаст и IT-команда ритейлера Магнит. В предыдущих выпусках обсуждали Data Governance, современные облачные решения и микросервисы, IT HR, ecom, кому нужен agile (а кому не нужен) и многое другое, так что стоит обратить внимание.
Посмотреть вакансии и отправить резюме: https://magnit.tech
Please open Telegram to view this post
VIEW IN TELEGRAM
Уважаемые разработчики! 🖥 Сегодня я хочу поделиться с вами полезными советами от Сергея Наумкина, разработчика-лидера команды в Kaspersky.
Если ваша работа занимает слишком много времени, и вы хотите найти способы упростить и ускорить процесс разработки и тестирования приложений, то вам будет интересно узнать о преимуществах докеризации, которые он описывает в посте ниже😉
Кстати, там же вы сможете ознакомиться с вакансиями для Go-разработчиков в Kaspersky и применить свои навыки в команде профессионалов.
Если ваша работа занимает слишком много времени, и вы хотите найти способы упростить и ускорить процесс разработки и тестирования приложений, то вам будет интересно узнать о преимуществах докеризации, которые он описывает в посте ниже😉
Кстати, там же вы сможете ознакомиться с вакансиями для Go-разработчиков в Kaspersky и применить свои навыки в команде профессионалов.
Forwarded from Kaspersky Team
Всё могут тимлиды! 🤴 Development Team Lead в Kaspersky Сергей Наумкин объясняет, что делать тем, у кого работа занимает слишком много времени.
Возможно, ты помнишь, что ещё пару лет назад для разработки и тестирования приложений нужно было ставить на свою или виртуальную машину СУБД, брокер сообщений и прочий софт.
Только всё это — вчерашний день. Теперь достаточно поставить себе docker и скачать контейнеры, чтобы быстро проверить концепт или начать разработку.
Занимаешься микросервисными приложениями? Ответ тот же — ставь docker. С ним будет в разы проще поднять инфраструктуру, а с docker-compose заниматься разработкой и тестированием в максимально реалистичной среде.
Несколько доводов в пользу докеризации приложения:
➡️ удобно передавать свой сервис в пользование команды;
➡️ проще поднять всю среду для разработки и тестирования;
➡️ легче воспроизводить разные сценарии;
➡️ нет зависимости от окружения рабочей станции;
➡️ бесплатная масштабируемость;
➡️ легковесность (в отличие от ВМ).
Docker-образы не должны пугать тебя размерами, ведь multi-stage сборки помогут держать в контейнере только необходимый сервис, а distroless сэкономит место.
Согласен с тем, что докеризация — классное решение? Любишь Go и хочешь работать с нами? Загляни по этой ссылке с вакансиями для Go-разработчиков.
Возможно, ты помнишь, что ещё пару лет назад для разработки и тестирования приложений нужно было ставить на свою или виртуальную машину СУБД, брокер сообщений и прочий софт.
Только всё это — вчерашний день. Теперь достаточно поставить себе docker и скачать контейнеры, чтобы быстро проверить концепт или начать разработку.
Занимаешься микросервисными приложениями? Ответ тот же — ставь docker. С ним будет в разы проще поднять инфраструктуру, а с docker-compose заниматься разработкой и тестированием в максимально реалистичной среде.
Несколько доводов в пользу докеризации приложения:
Docker-образы не должны пугать тебя размерами, ведь multi-stage сборки помогут держать в контейнере только необходимый сервис, а distroless сэкономит место.
Согласен с тем, что докеризация — классное решение? Любишь Go и хочешь работать с нами? Загляни по этой ссылке с вакансиями для Go-разработчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Рекомендуем провести вторую половину лета с пользой, изучив Android разработку .
Мы собрали сложный материал и объясняем его максимально просто в нашем телеграм канале бесплатно, без смс и регистраций.
Научись:
- дизайну и созданию приложений
- правильной архитектуре
- разработке игр
- методам заработка на приложениях
Освой одну из самых топовых профессий в мире разработчика приложений с нуля, путешествуй и зарабатывай из любой точки планеты.
Не плати за курсы, кла
Мы собрали сложный материал и объясняем его максимально просто в нашем телеграм канале бесплатно, без смс и регистраций.
Научись:
- дизайну и созданию приложений
- правильной архитектуре
- разработке игр
- методам заработка на приложениях
Освой одну из самых топовых профессий в мире разработчика приложений с нуля, путешествуй и зарабатывай из любой точки планеты.
Не плати за курсы, кла
Каким будет вывод кода ниже? основной пакет
импорт ("фмт")
константа A int = 1 func main () { fmt.Println(A) }
импорт ("фмт")
константа A int = 1 func main () { fmt.Println(A) }
Anonymous Quiz
97%
1
2%
2
1%
4
0%
3
👨🏻💻 Реальный вопрос от реального человека
Не понимаю, почему нельзя так сделать... Подскажите, пожалуйста
validationErrors = validator.ValidationErrors{
&validator.FieldError{
FieldError: errors.FieldError{
Field: "Name",
Tag: "required",
Err: fmt.Errorf("Name is required"),
},
},
&validator.FieldError{
FieldError: errors.FieldError{
Field: "Age",
Tag: "gte",
Param: "18",
Err: fmt.Errorf("Age must be greater than or equal to 18"),
},
},
}
Golang задачи с собеседований
Не понимаю, почему нельзя так сделать... Подскажите, пожалуйста
validationErrors = validator.ValidationErrors{
&validator.FieldError{
FieldError: errors.FieldError{
Field: "Name",
Tag: "required",
Err: fmt.Errorf("Name is required"),
},
},
&validator.FieldError{
FieldError: errors.FieldError{
Field: "Age",
Tag: "gte",
Param: "18",
Err: fmt.Errorf("Age must be greater than or equal to 18"),
},
},
}
Golang задачи с собеседований