🔴 Сложный · 3 очк. Разное / продвинутое
Для чего используется директива //go:linkname?
A Создание символических ссылок на файлы
B Доступ к неэкспортированным символам другого пакета
C Линковка с C-библиотеками
D Переименование функции при компиляции
Объяснение вопроса

//go:linkname позволяет связать локальное имя с неэкспортированным символом другого пакета, обходя обычные правила видимости Go.

Как выглядит

//go:linkname runtimeNanotime runtime.nanotime
func runtimeNanotime() int64

После этого вызов runtimeNanotime() в вашем пакете фактически вызывает неэкспортированную runtime.nanotime.

Где используется

В стандартной библиотеке - для низкоуровневых вещей (рантайм, синхронизация). В пользовательском коде использовать не рекомендуется: нет гарантий совместимости при обновлении Go, возможны неожиданные поломки.

  • Обход инкапсуляции - хрупко
  • Зависимость от внутренней реализации другого пакета
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.