Forwarded from Библиотека программиста | программирование, кодинг, разработка
💻 Подборка вопросов от Кирилла Мокевнина, которые имеет смысл задать на собесах для проверки уровня разработчика и навыков решения прикладных задач (типовых для веба)
👉 Читать остальные вопросы
💬 Веб-разработчики, как вам?
👉 Читать остальные вопросы
💬 Веб-разработчики, как вам?
👍13🥱13🤔5🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱27🔥12👍5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
git switch — просто переключает веткуgit restore — восстанавливает файл до последней зафиксированной версииgit sparse-checkout — загружает в рабочую копию только подмножество файлов из большого репозиторияgit worktree — управляет несколькими рабочими деревьями, связанными с одним репозиторием👉 Читать перевод & оригинал
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉16🥱5👍2❤1
Value receivers и nil
Представьте себе структуру с двумя методами: один использует pointer receiver, а другой — value receiver.
Что происходит, если receiver равен
Переменная
Однако, если мы выполняем этот код, вызов
📌 Что происходит?
Рассмотрим, что методы — это просто функции с некоторым синтаксическим сахаром. Метод
Таким образом, вышеуказанный код может быть переписан без методов следующим образом:
Теперь должно быть легко понять, почему
Для метода
Так что, если у вас есть тип с pointer/value receivers, будьте осторожны, чтобы не вызывать какие-либо методы для
#tip
Представьте себе структуру с двумя методами: один использует pointer receiver, а другой — value receiver.
package main
type S struct {
N int
}
func (s *S) PointerRcv() {
}
func (s S) ValueRcv() {
}
Что происходит, если receiver равен
nil?
func main() {
var s *S // s равно nil
s.PointerRcv()
s.ValueRcv()
}
Переменная
s принимает нулевое значение типа *S, которое является nil. Поскольку ни один из методов не обращается к receiver'у, оба вызова метода должны пройти без проблем.Однако, если мы выполняем этот код, вызов
s.ValueRcv() вызовет панику!📌 Что происходит?
Рассмотрим, что методы — это просто функции с некоторым синтаксическим сахаром. Метод
func (s S) f() семантически идентичен функции func f(s S). Method receiver становится первым аргументом функции.Таким образом, вышеуказанный код может быть переписан без методов следующим образом:
package main
type S struct {
N int
}
func PointerFunc(s *S) {
}
func ValueFunc(s S) {
}
func main() {
var s *S
PointerFunc(s)
ValueFunc(*s)
}
Теперь должно быть легко понять, почему
ValueFunc() вызывает панику. Указатель s должен быть разыменован при передаче его в ValueFunc(). Разыменование nil указателя невозможно и приводит к панике.Для метода
func (s *S) PointerRcv(), receiver (или параметр функции во втором примере) не нуждается в разыменовании. Следовательно, паники не будет.Так что, если у вас есть тип с pointer/value receivers, будьте осторожны, чтобы не вызывать какие-либо методы для
nil значения этого типа.#tip
👍49🥱6❤1