Go中的`append()...`是做什么的

I have this Go code

kithttp.NewServer(
    endpoints.AuthorizeUserEndpoint,
    decodeRequest,
    encodeResponse,
    append(options, httptransport.ServerBefore(opentracing.FromHTTPRequest(tracer, "calling HTTP POST /endpoint", logger)))...,
)

Could you explain me what does append()... do with ... in the end.

The append built-in function appends elements to the end of a slice.

Read more in the docs.

The ... is used in variadic functions (of which append is an example), to pass all of the elements of the preceding variable.

So given a variable x := []int{1, 2, 3}, the expression foo(x...) will pass it to a function as if you had called foo(1, 2, 3) in contrast to foo(x) which would equivalent to foo([]int{1, 2, 3}).

Basically append takes the options slice, appends additional options to it, returns new slice and then this merged slice is passed as separate arguments to kithttp.NewServer constructor thanks to ....