Abaixo está um trecho do código Go sobre o qual tenho dúvidas. Especificamente, o que há a
nesta função?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
Alguém poderia me dizer quais são os três pontos aqui? E o que ...interface{}
fazer?
Respostas:
Um tipo de parâmetro prefixado com três pontos (...) é chamado de parâmetro variável . Isso significa que você pode passar qualquer número ou argumento para esse parâmetro (assim como com
fmt.Printf()
). A função receberá a lista de argumentos para o parâmetro como uma fatia do tipo declarado para o parâmetro ([]interface{}
no seu caso). A especificação Go afirma:Um parâmetro:
É, para a função equivalente a:
A diferença é como você passa os argumentos para tal função. Isso é feito fornecendo cada elemento da fatia separadamente ou como uma única fatia, caso em que você terá que sufocar o valor da fatia com os três pontos. Os exemplos a seguir resultarão na mesma chamada:
Fará o mesmo que:
Isso também é explicado muito bem na Especificação Go :
fonte
Quanto ao
interface{}
prazo, é a interface vazia. Em outras palavras, a interface implementada por todas as variáveis em Go.Isso é análogo a
java.lang.Object
ouSystem.Object
em C #, mas inclui todos os tipos de variáveis da linguagem. Portanto, permite que você passe qualquer coisa para o método.fonte