Это func
декларация
FunctionType = "func" Signature .
Signature = Parameters [ Result ] .
Result = Parameters | Type .
Parameters = "(" [ ParameterList [ "," ] ] ")" .
ParameterList = ParameterDecl { "," ParameterDecl } .
ParameterDecl = [ IdentifierList ] [ "..." ] Type .
Как видите, Result
подобен параметрам метода a Parameters
, который в свою очередь сводится к IdentifierList
. Идет пустой идентификатор _
, который может заменить каждый идентификатор в IdentifierList
.
Первоначальный автор использовал это вместе с синтаксисом «несколько идентификаторов, объявленных для одного и того же типа», чтобы создать - как уже упоминалось - странное для чтения объявление двух возвращаемых значений одного и того же типа.
См. https://golang.org/ref/spec#Function_declarations
Вы также можете реализовать функции, которые «удаляют» параметры, используя для них пустой идентификатор. Может пригодиться, когда вам не нужен параметр интерфейса, который вы реализуете.
func foo(a string, _ int, b string) { ... }
Второй параметр недоступен для использования.