Общие вопросы
Смешанные вопросы по Go.
Открыть разделБаза Hintsage
Язык Go и разработка надёжных сервисов.
Темы раздела
Смешанные вопросы по Go.
Открыть разделТипы, функции, структуры, пакеты и базовая семантика Go.
Открыть разделКонкурентность, goroutines, channels, select и синхронизация.
Открыть разделИнтерфейсы, методы, type assertions и generics.
Открыть разделАллокации, escape analysis, сборщик мусора и производительность.
Открыть разделErrors, wrapping, panic/recover и проектирование ошибок.
Открыть разделUnit-тесты, table-driven tests, mocks, race detector и benchmarks.
Открыть разделПрактика
Разберите, какое значение напечатает программа и почему результат зависит от типа значения внутри интерфейса.
package main
import "fmt"
type MyError struct{}
func (*MyError) Error() string { return "ошибка" }
func makeErr() error {
var e *MyError
return e
}
func main() {
fmt.Println(makeErr() == nil)
}
Объясните, когда Go автоматически берёт адрес значения структуры для вызова метода с указательным получателем.
Как передача среза в функцию влияет на видимость изменений его элементов и самого среза для вызывающего кода?
Сравнение: чем по смыслу для компилятора отличается псевдоним типа от нового именованного типа?
В практической ситуации функция возвращает именованный результат, а отложенная функция изменяет его перед выходом. Какое значение получит вызывающий код?
По какому признаку в Go различают отсутствие ключа в map и наличие ключа с нулевым значением?
Опишите механизм определения порядка инициализации переменных уровня пакета при наличии зависимостей в Go.
Какие свойства полей структуры определяют, можно ли сравнивать её значения оператором == в Go?
Представьте структуру с двумя встроенными типами, каждый из которых содержит поле одного имени: как Go разрешает обращение к этому полю?
При каких условиях значение структуры удовлетворяет интерфейсу только через указатель, а не само по себе?
Что означает присваивание одной map другой с точки зрения совместного изменения данных?
Функция получает массив фиксированной длины по значению. Видны ли вызывающему коду изменения его элементов внутри функции?
Какое последствие имеет вызов переменной-функции, которой не присвоено значение?
В функции отложенный вызов печатает значение переменной после её изменения. Какой порядок и значения выведет программа?
package main
import "fmt"
func main() {
x := 1
defer fmt.Println("аргумент:", x)
defer func() {
fmt.Println("замыкание:", x)
}()
x = 2
}
Сопоставьте семантику nil-среза и пустого среза: в каких случаях их различие становится наблюдаемым?
Как затенение переменной во вложенном блоке влияет на замыкание, созданное внутри этого блока?
В чём состоит ограничение сравнения значений функционального типа в Go?
При вызове метода через интерфейсное значение какой механизм определяет реализацию, которая будет выполнена?
Сохранение метода в переменную: когда фиксируется получатель в Go?
В сервисе вызывают метод через nil-указатель на структуру. От чего зависит, завершится ли такой вызов паникой?
Показано 1–20 из 333