Golang задачи с собеседований
4.59K subscribers
486 photos
6 videos
12 files
254 links
Задачи, тесты и теоретические вопросы по Go. Так же по gin, grpc, горутинах, архитектуре api и http стэку.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
加入频道
В каком из вариантов x определена на heap?
Anonymous Quiz
32%
Вариант 1
68%
Вариант 2
Какой размер буфера по умолчанию у каналов в Go?
Anonymous Quiz
29%
nil
28%
1
43%
0
Какие символы команда go fmt использует для отступа?
Anonymous Quiz
26%
4 пробела
21%
Эту функцию можно настроить
10%
2 пробела
43%
Символ табуляции
Для тех, кто программирует на Go!

Golang-разработчиков с опытом от трех лет приглашают на Go Weekend Offer в Тинькофф. Все этапы интервью можно будет пройти за выходные. А еще вы познакомитесь с командой и спросите обо всем, что вас интересует.

В Тинькофф нет бюрократии, много интересных проектов и прозрачная система карьерного роста. А работать можно в гибридном режиме в офисах в 22 городах России или в Казахстане, Беларуси и Армении.

И главное: Go Weekend Offer состоится 3 и 4 июня. Но подать заявку надо до 31 мая. Регистрируйтесь!
25 мая в Петербурге – в оффлайн и онлайн формате – пройдет митап для всех, кто только задумывается или уже начал применять Go в коммерческой разработке. Ждем разработчиков любого уровня, лидов и команды!
 
Регистрируйтесь и приходите или смотрите трансляцию онлайн, участие бесплатное.   
 
>> To Go or not to Go (Евгений Соколов, YADRO)
Рассмотрим ключевые парадигмы программирования на Go. Узнаем, как работают горутины, планировщик, каналы и модули. И поймем, как ускорить изучение языка.
 
>> Функции, методы и интерфейсы в Gо: особенности и идиомы (Владислав Белогрудов, YADRO)
Вы узнаете, как идиоматично писать функции без побочных эффектов и когда это не работает. Заглянем под капот интерфейсов и устроим небольшие соревнования производительности.
 
>> Эффективно используем Go в команде (Геннадий Ковалев, YADRO)
Поговорим, что такое хороший код на Go с точки зрения командной разработки, и как средства языка помогут убрать лишние споры, сделать продукт тестируемым, а будущий рефакторинг — спокойным.
Какой спецификатор следует использовать с fmt.Printf, чтобы напечатать логическое значение?
Anonymous Quiz
59%
%b
18%
%t
19%
%v
3%
%s
Вакансия инженера по эксплуатации ClickHouse
  
Ozon в поисках разработчика в команду платформы баз данных, без которых не обходится ни один проект или сервис в Ozon. ∼100 инсталляций Clickhouse и несколько крупных кластеров (петабайты данных!). Важно, чтобы они работали быстро и безотказно. Поэтому нужен человек, который умеет копать вглубь и решать сложные технические вопросы. 
  
Что ждут от тебя:  
• Владеешь C++ или Golang;  
• Знаешь устройство ClickHouse, движков, индексов;  
• Работал с Git, Kubernetes, Docker, Kafka, Zookeeper, Ansible/Terraform/Helm;  
• Понимаешь внутренности Unix/Linux и инструментов отладки;  
  
Оставить отклик и рассказать о себе можно по ссылке ниже 
Откликнуться
👨🏻‍💻 Реальный вопрос от реального человека

Есть табличное тестирование функции (делал на основании туториалов с официального сайта go). Примечание: Go недавно щупаю.

Условный код:

func TestMyFunc(t *testing.T) {
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)
}
})
}
}
Так вот, у меня в массиве структур порядка 30 позиций для теста, но почему-то возникает ситуация, когда я нажимаю пройти тесты в vscode, некоторые тесты кидают в result просто что-то случайное. Например ожидается какая-то ошибка, но приходит nil, или наоборот, ожидается nil, но приходит ошибка, и третий вариант, ожидается одна ошибка, но приходит совершенна другая(!). При этом корректность функции проверена и точно должна выдавать нужный результат.

Если прожать кнопку тестирования несколько раз, то со второго-третьего раза тесты все проходят успешно и больше ошибок не возникает, пока не изменить код. Сначала я думал что дело в vscode, но go test даёт тот же самый эффект.

Пробовал ставить t.Parallel() в главную функцию, не помогает. Есть объяснение что за чародейство и какое решение может быть?

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.20

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"]

Dockerfile producer:

FROM golang:1.20

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"]

В docker compose опущу данные кафки и кипера), опишу что касается двух сервисов. docker-compose:

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 используются разные структуры) с целью конверсии валюты в заданную.

Имеется:

Структура, содержащая цену с валютой

 type Price struct {
Amount decimal.Decimal `json:"Amount"`
Currency string `json:"Currency`"
}

Структура ответа #1:

type ExampleRS struct {
Total price.Price `json:"Total"`
}

Дополнительная структура для ответа #2

type ResponseEntry struct {
ExampleIntValue int `json:"ExampleValue"`
ExampleStringArrayValues []string `json:"ExampleStringArrayValues"`
Price price.Price `json:"Price"`
}

Структура ответа #2

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.

func main() {
// Установка роутера Gin
router := gin.Default()

router.Static("/css", "./css")

В html такие пути

<img src= "/css/img/logo3.png">

а в самой директории проекта есть папка css, в ней папка img и там изображения.

Но почему-то при запуске всё равно выдаёт 404

Golang задачи с собеседований