Na linguagem Go,
[]string é um array de string
e também usamos ...stringcomo parâmetro.
Qual é a diferença?
Definição de função:
func f(args ...string) {}
Posso chamar essa função como abaixo?
args := []string{"a", "b"}
f(args)
Na linguagem Go,
[]string é um array de string
e também usamos ...stringcomo parâmetro.
Qual é a diferença?
Definição de função:
func f(args ...string) {}
Posso chamar essa função como abaixo?
args := []string{"a", "b"}
f(args)
Respostas:
[]stringé um array de string
Tecnicamente, é uma fatia que faz referência a uma matriz subjacente
e também usamos
...stringcomo parâmetro.Qual é a diferença?
Com relação à estrutura, nada mesmo. O tipo de dados resultante de ambas as sintaxes é o mesmo.
A ...sintaxe do parâmetro torna um parâmetro variável. Ele aceitará zero ou mais stringargumentos e fará referência a eles como uma fatia.
Com relação à chamada f, você pode passar uma parte de strings para o parâmetro variadic com a seguinte sintaxe:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Essa sintaxe está disponível para a fatia construída usando a sintaxe literal ou para a fatia que representa o parâmetro variável (já que realmente não há diferença entre eles) .
[]stringsintaxe. Acrescentarei mais da citação à minha resposta para torná-la mais clara. :-)
Ambos criam um array de strings, mas a diferença está em como é chamado.
func f(args ...string) {
}
// Would be called like this:
f("foo","bar","baz");
Isso permite que você aceite um número variável de argumentos (todos do mesmo tipo)
Um grande exemplo disso é fmt.Printe amigos, que podem aceitar quantos argumentos você quiser.
def fn(*args)construção do python .
Aqui está o que você deseja:
var args []string = []string{"A", "B", "C"}
func Sample(args ...string) {
for _, arg := range args {
fmt.Println(arg)
}
}
func main() {
Sample(args...)
}
Isso simplifica seus parâmetros de função. Aqui está um exemplo ( https://play.golang.org/p/euMuy6IvaM ): O método SampleEllipsis aceita de zero a muitos parâmetros do mesmo tipo, mas no método SampleArray é obrigatório declarar args .
package main
import "fmt"
func SampleEllipsis(args ...string) {
fmt.Printf("Sample ellipsis : %+v\n",args)
}
func SampleArray(args []string) {
fmt.Println("Sample array ")
SampleEllipsis(args...)
}
func main() {
// Method one
SampleEllipsis([]string{"A", "B", "C"}...)
// Method two
SampleEllipsis("A", "B", "C")
// Method three
SampleEllipsis()
// Simple array
SampleArray([]string{"A", "B", "C"})
// Simple array
SampleArray([]string{})
}
Retorna:
Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []
[]stringé uma fatia, não uma matriz. As diferenças entre uma matriz e uma fatia são sutis, mas importantes.