Библиотека Go для собеса | вопросы с собеседований
6.86K subscribers
218 photos
6 videos
1 file
409 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Добейте 7 бустов, плиз, иначе вопросов с собесов не будет 🚬
Please open Telegram to view this post
VIEW IN TELEGRAM
😢12😁5
Что такое паттерн «Декоратор» и как его реализовать

Декоратор — это способ добавить новую логику к объекту, не меняя его код. В Go это удобно делать через интерфейсы. Один объект «оборачивает» другой и выполняет дополнительную работу до или после вызова.

Такой подход часто используют для логирования, замеров времени, прав доступа и т.д.

Простой пример: логирование вызова метода
type Handler interface {
Handle(msg string) string
}

type SimpleHandler struct{}

func (h SimpleHandler) Handle(msg string) string {
return "Handled: " + msg
}


Теперь сделаем обёртку:
type LoggingHandler struct {
next Handler
}

func (l LoggingHandler) Handle(msg string) string {
fmt.Println("Запрос:", msg)
result := l.next.Handle(msg)
fmt.Println("Ответ:", result)
return result
}


Использование:
func main() {
base := SimpleHandler{}
withLog := LoggingHandler{next: base}

fmt.Println(withLog.Handle("тест"))
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥3👍1
В чем особенность неиспользуемых переменных и импортов в Go

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

➡️ Если в коде есть неиспользуемая локальная переменная, такой код не скомпилируется.
package main

import "fmt"

func main() {
x := 10
fmt.Println("Hello, World!")
}

Компилятор выдаст ошибку: x declared but not used

➡️ Если функция возвращает значения, но значения не используются, компилятор не выдаст ошибку.
Однако если значения присваиваются переменным, которые затем не используются, это вызовет ошибку компиляции.
package main

import "errors"

func doSomething() (int, error) {
return 42, errors.New("an error occurred")
}

func main() {
doSomething() // Это допустимо
result, err := doSomething() // Ошибка, так как result и err не используются
}


➡️ Если в коде присутствует импорт, который не используется, компилятор выдаст ошибку: "math" imported and not used
package main

import "math" // Ошибка, импорт не используется

func main() {
// Ничего не делаем
}


Правило не касается неиспользуемых параметров функций и глобальных переменных. Код скомпилируется:
package main

import "fmt"

var globalVar int // Глобальная переменная, которая не используется

func greet(name string, age int) { // Параметры функции также могут не использоваться
fmt.Println("Hello,", name)
}

func main() {
greet("Alice", 25) // Параметры функции 'name' и 'age' не используются
fmt.Println("Hello, World!")
}


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