Go собеседования
616 subscribers
106 photos
224 links
Подготовка к собеседованиям на позицию Go-разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
Go работа - @frontview_go_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
▶️ Для подключения к базе данных SQL в Go используется пакет database/sql вместе с драйвером для конкретной базы данных, например, github.com/go-sql-driver/mysql для MySQL.

▶️ Сначала необходимо импортировать нужные пакеты и открыть соединение:


import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)

func main() {
// Открытие соединения с базой данных
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
panic(err)
}
defer db.Close()
}


✔️ После этого можно выполнять SQL-запросы, используя методы Query или Exec.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов, который использует стандартные HTTP методы для взаимодействия с ресурсами. Основные принципы REST включают stateless-сервер, кэшируемость, клиент-серверную архитектуру и унифицированный интерфейс.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
😎 Константы объявляются с использованием ключевого слова const. Константы представляют собой неизменяемые значения, которые определяются на этапе компиляции. Они могут быть числовыми, строковыми или булевыми.


package main

import "fmt"

func main() {
// Объявление числовой константы
const pi = 3.14

// Объявление строковой константы
const greeting = "Привет, мир!"

// Использование констант в коде
fmt.Println("Значение pi:", pi)
fmt.Println(greeting)
}


😎 Константы полезны для определения значений, которые не должны изменяться в ходе выполнения программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Горутина — это легковесный поток, управляемый планировщиком Go, который позволяет выполнять функции одновременно и эффективно использовать многопоточность. Они упрощают разработку конкурентных программ, обеспечивая простую синтаксическую конструкцию для параллельного выполнения кода.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
😁 Команда go get используется для загрузки и установки удалённых пакетов и их зависимостей в Go. Она также обновляет модули в go.mod.

go get github.com/user/repo
# Загрузить и установить пакет из удалённого репозитория


😁 Для обновления пакета до последней версии:

go get -u github.com/user/repo
# Обновить пакет до последней версии


😁 С версии Go 1.17 go get больше не используется для установки бинарных файлов. Для этого применяется go install.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Строки являются неизменяемыми последовательностями байтов, что позволяет эффективно работать с текстовыми данными. Они могут быть легко преобразованы в срезы байтов для манипуляций, а также поддерживают встроенные функции для работы с текстом, такие как получение длины строки, конкатенация и т.д.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Пакет fmt предоставляет функции для форматированного ввода-вывода.

1⃣ Println и Printf для вывода:
package main

import "fmt"

func main() {
name := "Alice"
age := 30

// Println добавляет пробелы между аргументами и перевод строки в конце
fmt.Println("Name:", name, "Age:", age)

// Printf позволяет использовать форматные спецификаторы
fmt.Printf("Name: %s, Age: %d\n", name, age)
}


2⃣ Sprintf для форматирования строк:

formatted := fmt.Sprintf("Name: %s, Age: %d", name, age)
// Возвращает отформатированную строку без вывода на консоль


3⃣ Scan и Scanf для ввода:
var input string
fmt.Scanln(&input)
// Считывает строку из стандартного ввода до перевода строки


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Интерфейс — это набор методов, который определяет поведение, которое должен реализовать тип, чтобы соответствовать этому интерфейсу. Интерфейсы позволяют создавать гибкие и расширяемые программы, так как типы могут реализовывать несколько интерфейсов, а интерфейсы могут быть использованы для абстракции и полиморфизма.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🤔1
🛑 Оператор new используется для выделения памяти под новый нулевой экземпляр указанного типа и возвращает указатель на него.

🛑 В отличие от make, который используется для инициализации срезов, карт и каналов, new не инициализирует память, а лишь выделяет её, возвращая указатель на тип.

package main

import "fmt"

func main() {
p := new(int) // выделяет память для int и возвращает указатель
fmt.Println(*p) // выводит 0, так как значение по умолчанию для int — ноль

*p = 42 // изменяет значение через указатель
fmt.Println(*p) // выводит 42
}


🛑 new полезен для создания указателей на типы без явного объявления переменной.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
Интерфейсы в Go являются набором методов, и типы автоматически реализуют интерфейс, если они имеют все методы, определенные в этом интерфейсе, что позволяет гибко и динамично использовать интерфейсы без явного указания реализации. В отличие от многих других языков, Go не требует явного объявления реализации интерфейса, что упрощает и делает более гибким процесс разработки.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Для генерации случайных чисел используется пакет math/rand. Он предоставляет функции для генерации псевдослучайных чисел.


package main

import (
"fmt"
"math/rand"
"time"
)

func main() {
rand.Seed(time.Now().UnixNano()) // Инициализация генератора случайных чисел текущим временем

randomInt := rand.Intn(100) // Генерация случайного целого числа от 0 до 99
fmt.Println(randomInt)

randomFloat := rand.Float64() // Генерация случайного числа с плавающей точкой от 0.0 до 1.0
fmt.Println(randomFloat)
}


▶️Инициализация с помощью Seed необходима для получения разных последовательностей случайных чисел при каждом запуске программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Контейнеризация — это метод упаковки приложения и его зависимостей в единый контейнер, который может быть запущен в любой среде без изменений. Преимущества контейнеризации включают в себя улучшенную портативность, изоляцию приложений и упрощение процессов развертывания и масштабирования.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
🖇 Пакет testing используется для создания и выполнения тестов. Он предоставляет инструменты для написания тестовых функций, которые проверяют корректность кода.

🔹Тестовая функция должна начинаться с Test и принимать параметр *testing.T.

package main

import (
"testing"
)

// Пример тестовой функции
func TestSum(t *testing.T) {
result := Sum(2, 3)
expected := 5

if result != expected {
t.Errorf("Expected %d, got %d", expected, result)
}
}

// Функция, которую тестируем
func Sum(a, b int) int {
return a + b
}


🔹Для запуска тестов используется команда go test. Пакет testing позволяет автоматизировать проверку кода и улучшать его надежность.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Для проверки, закрыт ли канал, используется второе возвращаемое значение при чтении из канала, которое указывает на его состояние. Если канал закрыт, это значение будет равно false, что позволяет определить, что больше данных из канала не поступит.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
🔥 В Go доступны несколько инструментов профилирования, которые помогают анализировать производительность приложений.

▶️ Основной инструмент — pprof, который позволяет собирать и визуализировать профили CPU, памяти, блокировок и других ресурсов. Он интегрирован в стандартную библиотеку и может быть использован для создания отчётов о производительности.

▶️ Также полезен trace, который предоставляет детализированное представление о выполнении программы, включая события планировщика и операции с каналами.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Паттерны проектирования делятся на три основные группы:

1️⃣ Порождающие паттерны: Эти паттерны фокусируются на процессе создания объектов, обеспечивая гибкость и повторное использование кода. Основные порождающие паттерны включают Фабричный метод, Абстрактная фабрика, Строитель, Прототип и Одиночка.

2️⃣ Структурные паттерны: Эти паттерны определяют, как классы и объекты могут быть объединены для формирования более крупных структур. К ним относятся Адаптер, Мост, Компоновщик, Декоратор, Фасад, Легковес и Заместитель.

3️⃣ Поведенческие паттерны: Эти паттерны связаны с взаимодействием между объектами и распределением обязанностей. Основные поведенческие паттерны включают Цепочку обязанностей, Команду, Итератор, Посредник, Хранитель, Наблюдатель, Состояние, Стратегию, Шаблонный метод и Посетитель.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💯1
📌 Сериализация структуры в JSON осуществляется с помощью пакета encoding/json. Для этого используется функция json.Marshal(), которая преобразует структуру в JSON-формат.


package main

import (
"encoding/json"
"fmt"
)

// Определение структуры
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}

func main() {
// Создание экземпляра структуры
user := User{Name: "Alice", Age: 30}

// Сериализация структуры в JSON
jsonData, err := json.Marshal(user)
if err != nil {
fmt.Println(err)
return
}

// Вывод JSON-строки
fmt.Println(string(jsonData))
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
Для шифрования данных в Go используются пакеты из стандартной библиотеки, такие как crypto/aes для симметричного шифрования и crypto/rsa для асимметричного шифрования. Также доступны пакеты crypto/cipher для работы с различными режимами шифрования и crypto/sha256 для хеширования данных.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
🛑 Канал — это инструмент для синхронизации и обмена данными между горутинами. Он позволяет одной горутине отправлять данные, а другой — получать их, обеспечивая безопасный обмен информацией без использования мьютексов.

➡️ Каналы создаются с помощью функции make:

ch := make(chan int)


➡️ Отправка и получение данных осуществляется с помощью оператора <-:

// Отправка данных в канал
ch <- 42

// Получение данных из канала
value := <-ch


Каналы могут быть буферизированными или небуферизированными, что влияет на их поведение при отправке и получении данных.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Для форматирования кода используется утилита gofmt, которая запускается из командной строки с указанием пути к файлу или директории. Чтобы автоматически отформатировать все файлы в текущей директории и её поддиректориях, достаточно выполнить команду gofmt -w .

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7💯1