When viewing the source for the math.Ceil
method, I found this syntax where there's an exported function signature with no body, and a non-exported version of the same signature that includes the implementation:
// 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)
}
I assume this is some syntax which allows you to easily export a local function. Is that correct? And why would one do this instead of just having a single exported function and using it within the package?
According to the Go language specification.
In this case, the
Ceil
function is implemented by an architecture specific assembly file for 386 infloor_386.s
. Both the amd64 and arm architectures each have an assembly file that implementsCeil()
as well, but those assembly files are just glue to call the unexportedceil()
function.