Библиотека Go для собеса | вопросы с собеседований
6.77K subscribers
214 photos
5 videos
1 file
352 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Какие инструменты для фаззинг-тестирования поддерживает Go

Go предоставляет встроенную поддержку фаззинг-тестирования с версии Go 1.18. Для этого в Go используется пакет testing, который теперь включает в себя поддержку фаззинга через встроенную функцию Fuzz

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем может понадобиться паттерн функциональных опций

Функциональные опции позволяют гибко конфигурировать объект, не перегружая конструктор множеством параметров. Вместо длинной сигнатуры New() с десятком аргументов — часть параметров выносится в функции-опции.

Это упрощает читаемость, делает код масштабируемым и помогает не раскрывать внутренние поля структуры. Особенно полезно, когда появляются новые настройки — не нужно менять сигнатуру, достаточно добавить новую опцию.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️ Пример для предыдущего вопроса

У нас есть структура ServerConfig. Она хранит все настройки сервера: хост, порт, флаг использования TLS и таймаут.

В функции NewServer мы принимаем срез функций типа Option, который позволяет нам гибко настраивать сервер.

Каждая опция — это просто функция. Причём она не меняет сервер напрямую, а принимает на вход его конфигурацию и меняет только нужное поле.

import "fmt"

// Конфигурация структуры
type ServerConfig struct {
Host string
Port int
UseTLS bool
Timeout int
}

// Тип функции, которая изменяет настройки конфигурации
type Option func(*ServerConfig)

// Новый сервер с конфигурацией по умолчанию
func NewServer(options ...Option) *ServerConfig {
// Настройки по умолчанию
config := &ServerConfig{
Host: "localhost",
Port: 8080,
UseTLS: false,
Timeout: 30,
}

// Применение всех переданных опций
for _, option := range options {
option(config)
}

return config
}

// Опция для изменения хоста
func WithHost(host string) Option {
return func(c *ServerConfig) {
c.Host = host
}
}

// Опция для изменения порта
func WithPort(port int) Option {
return func(c *ServerConfig) {
c.Port = port
}
}

// Опция для включения TLS
func WithTLS(enable bool) Option {
return func(c *ServerConfig) {
c.UseTLS = enable
}
}

// Опция для изменения таймаута
func WithTimeout(timeout int) Option {
return func(c *ServerConfig) {
c.Timeout = timeout
}
}

func main() {
// Создаем сервер с настройками по умолчанию
server := NewServer()

// Печатаем настройки сервера
fmt.Printf("Default server config: %+v\n", server)

// Создаем сервер с измененными настройками
customServer := NewServer(
WithHost("example.com"),
WithPort(9090),
WithTLS(true),
WithTimeout(60),
)

// Печатаем новые настройки сервера
fmt.Printf("Custom server config: %+v\n", customServer)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем нужен метод bytes.Trim в Go

Метод bytes.Trim в Go удаляет все начальные и конечные байты, которые входят в заданный набор символов, называемый cutset. Он работает с срезами байтов и возвращает новый срез, в котором удалены все символы из cutset с начала и конца исходного среза. Этот метод не изменяет сам исходный срез.

Если в cutset указано несколько символов, метод удалит все символы, входящие в этот набор, с границ строки.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😱 Завтра цена на курс «AI-агенты для DS» вырастет

Пока вы думаете — другие уже покупают. Что вы теряете, откладывая решение? Как минимум — 10 000 рублей, именно столько вы переплатите завтра. Как максимум — шанс войти в топ-1% дата-сайентистов, которые умеют строить AI-агенты.

🎓 Чему вы научитесь на курсе:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Решение за вами.

👉 Купить курс по старой цене
Можно ли использовать константы в switch

Да,в Go используют константы в выражениях switch. Это возможно, потому что константы имеют фиксированные значения, известные на этапе компиляции. Поскольку switch в Go работает с конкретными значениями, константы могут быть использованы в case выражениях без проблем, улучшая читаемость и предсказуемость кода.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает iota и зачем он нужен при объявлении констант

iota — это встроенная константа в Go, которая используется для создания последовательных значений в блоках констант. Каждый раз, когда iota используется в новой строке внутри блока const, его значение автоматически увеличивается на 1.

Это позволяет генерировать последовательности значений для констант без необходимости вручную указывать их. Например, в первой строке в блоке const iota будет равно 0, во второй — 1, в третьей — 2 и так далее.

iota особенно полезен при объявлении наборов констант, таких как флаги, индексы или статус-коды, где важно, чтобы значения шли подряд.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️ Фидбек по прошедшей неделе

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуются комментарии под постом.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM