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
✔️ Для этого необходимо реализовать интерфейс error, который требует наличие метода Error() string.


package main

import (
"fmt"
)

// CustomError представляет пользовательскую ошибку
type CustomError struct {
Message string
}

// Error возвращает сообщение об ошибке
func (e *CustomError) Error() string {
return e.Message
}

func main() {
err := &CustomError{Message: "Произошла ошибка"}
fmt.Println(err.Error())
}


Этот код демонстрирует создание пользовательской ошибки с помощью структуры CustomError и метода Error().

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
TCP (Transmission Control Protocol) обеспечивает надежную передачу данных с установлением соединения, гарантируя, что пакеты доставляются в правильном порядке и без потерь. UDP (User Datagram Protocol) более легковесный, не требует установления соединения и не гарантирует доставку, что делает его подходящим для приложений, где скорость важнее надежности, таких как потоковое видео или онлайн-игры.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Nil-указатель представляет собой указатель, который не указывает ни на какой объект или значение, и его значение по умолчанию равно nil. Использование nil-указателей требует осторожности, так как попытка разыменования такого указателя приведет к панике, поэтому перед использованием необходимо проверять их на nil.

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
🖇 Pprof — это инструмент для профилирования производительности Go-приложений. Он позволяет анализировать использование CPU, памяти и других ресурсов.

Для начала профилирования необходимо импортировать пакет net/http/pprof в код приложения. Затем добавить обработчики HTTP-запросов для профилей:


import _ "net/http/pprof"
import "net/http"

func main() {
go func() {
// Запуск HTTP-сервера для pprof
http.ListenAndServe(":6060", nil)
}()
// Основная логика приложения
}


✔️ После запуска приложения, профили доступны по адресу http://localhost:6060/debug/pprof/. Для анализа можно использовать команды go tool pprof.

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
Функция errors.New используется для создания нового значения ошибки с заданным текстовым сообщением, что позволяет легко определять и возвращать ошибки в коде. Она возвращает объект типа error, который может быть использован для обработки ошибок.

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
⭐️ Пакет database/sql предоставляет интерфейс для работы с базами данных. Для начала работы необходимо подключиться к базе данных с помощью функции sql.Open.


import (
"database/sql"
_ "github.com/go-sql-driver/mysql" // Импорт драйвера для 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()

// Выполнение запроса
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
panic(err)
}
defer rows.Close()

// Обработка результатов
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
panic(err)
}
fmt.Println(id, name)
}
}


Этот код подключается к MySQL, выполняет запрос и обрабатывает результаты.

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

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Для открытия файла для записи используется пакет os. Функция os.OpenFile позволяет задать режимы открытия файла, такие как чтение, запись или добавление.


package main

import (
"os"
"log"
)

func main() {
// Открытие файла для записи, создание файла, если он не существует
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()

// Запись строки в файл
_, err = file.WriteString("Hello, Go!")
if err != nil {
log.Fatal(err)
}
}


Этот код открывает файл example.txt для записи, создавая его, если он отсутствует.

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

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

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


package main

import "fmt"

// Интерфейс Speaker с одним методом Speak
type Speaker interface {
Speak() string
}

// Тип Dog, реализующий интерфейс Speaker
type Dog struct{}

func (d Dog) Speak() string {
return "Woof!"
}

func main() {
var s Speaker = Dog{}
fmt.Println(s.Speak()) // Вывод: Woof!
}


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

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

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


package main

import (
"fmt"
"time"
)

func main() {
ch1 := make(chan string)
ch2 := make(chan string)

go func() {
time.Sleep(1 * time.Second)
ch1 <- "Сообщение из канала 1"
}()

go func() {
time.Sleep(2 * time.Second)
ch2 <- "Сообщение из канала 2"
}()

select {
case msg1 := <-ch1:
fmt.Println(msg1) // Обработка сообщения из канала 1
case msg2 := <-ch2:
fmt.Println(msg2) // Обработка сообщения из канала 2
}
}


select позволяет эффективно управлять конкурентными операциями, обрабатывая данные по мере их поступления.

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

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

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

1️⃣ Бесконечный цикл:
for {
// Бесконечный цикл
}


2️⃣ Цикл с условием:
for condition {
// Выполняется, пока условие истинно
}


3️⃣ Цикл с инициализацией, условием и пост-выражением:
for i := 0; i < 10; i++ {
// Выполняется 10 раз


for также может использоваться для итерации по срезам, картам и каналам с помощью range.

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🤔1
Стандартная библиотека включает в себя такие основные пакеты, как fmt для форматированного ввода-вывода, net/http для работы с HTTP, os для взаимодействия с операционной системой, io для ввода-вывода, и encoding/json для работы с JSON. Эти пакеты обеспечивают базовую функциональность для разработки приложений на Go.

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

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

package main

import "fmt"

func main() {
// Создание среза
nums := []int{1, 2, 3, 4, 5}
fmt.Println(nums)

// Изменение элемента через указатель
changeFirstElement(&nums[0])
fmt.Println(nums)
}

func changeFirstElement(num *int) {
// Изменение значения по указателю
*num = 10
}


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

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

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

Основным файлом модуля является go.mod, он содержит информацию о модуле, его зависимостях и версии.


module example.com/my-module

go 1.18

require (
example.com/somepackage v1.2.3
)


Файл go.sum фиксирует версии зависимостей для обеспечения целостности.

Для работы с модулями используются команды go mod init, go mod tidy, go mod vendor и другие.

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

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

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

✈️ Go собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
✔️ Функция main() является точкой входа в программу. Когда программа запускается, выполнение начинается именно с этой функции. Она должна находиться в пакете main, иначе программа не сможет быть скомпилирована как исполняемый файл.


package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}


В этом примере main() выводит сообщение "Hello, World!". Без функции main() программа не сможет запуститься, так как компилятор не найдет точку входа. Все остальные функции и пакеты вызываются прямо или косвенно из main().

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

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