Подтвердить что ты не робот

Функциональная подпись без функции

При просмотре источника для метода 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)
}

Я предполагаю, что это некоторый синтаксис, который позволяет вам легко экспортировать локальную функцию. Это верно? И зачем это делать, а не просто иметь одну экспортированную функцию и использовать ее в пакете?

4b9b3361

Ответ 1

В соответствии с спецификацией языка Go.

Объявление функции может опустить тело. Такое объявление предоставляет подпись для функции, реализованной вне Go, например, процедуры сборки.

В этом случае функция Ceil реализуется архивом, специфичным для сборки, для 386 в floor_386.s. Обе архитектуры amd64 и arm имеют файл сборки, который также реализует Ceil(), но эти файлы сборки являются просто клеем, чтобы вызвать непортированную функцию Ceil().