Функциональная подпись без функции
При просмотре источника для метода math.Ceil
я нашел этот синтаксис, где есть экспортированная подпись функции без тела, -экспортная версия той же подписи, которая включает в себя реализацию:
// Ceil returns the least integer value greater than or equal to x.
//
// Special cases are:
// Ceil(±0) = ±0
// Ceil(±Inf) = ±Inf
// Ceil(NaN) = NaN
func Ceil(x float64) float64
func ceil(x float64) float64 {
return -Floor(-x)
}
Я предполагаю, что это некоторый синтаксис, который позволяет вам легко экспортировать локальную функцию. Это верно? И зачем это делать, а не просто иметь одну экспортированную функцию и использовать ее в пакете?
Ответы
Ответ 1
В соответствии с спецификацией языка Go.
Объявление функции может опустить тело. Такое объявление предоставляет подпись для функции, реализованной вне Go, например, процедуры сборки.
В этом случае функция Ceil
реализуется архивом, специфичным для сборки, для 386 в floor_386.s
. Обе архитектуры amd64 и arm имеют файл сборки, который также реализует Ceil()
, но эти файлы сборки являются просто клеем, чтобы вызвать непортированную функцию Ceil()
.