Diferencia entre []String y ...String en Go
-
Definir una rebanada usando
[]stringen Go -
Definir una función variádica usando
...stringen Go -
Use tanto
[]stringcomo...stringen Go
Una sección de array se denomina segmento. Los segmentos brindan más potencia, flexibilidad y conveniencia que los arreglos.
Las rebanadas son indexables y tienen una longitud similar a los arrays. A diferencia de los arrays, se pueden expandir.
Un segmento es una estructura de datos que define una sección contigua de una matriz y se mantiene separada de la variable de segmento.
No es lo mismo un array que un slice. Una porción de una matriz es un subconjunto de ella.
Este artículo discutirá las diferencias entre []string y ...string en Go.
Definir una rebanada usando []string en Go
En este ejemplo, usamos los comandos for y range para iterar a través de un conjunto de palabras.
package main
import "fmt"
func main() {
words := []string{"Iron Man", "Thor", "Hulk", "Dr Strange", "Spiderman"}
for idx, word := range words {
fmt.Println(idx, word)
}
}
Producción :
0 Iron Man
1 Thor
2 Hulk
3 Dr Strange
4 Spiderman
Definir una función variádica usando ...string en Go
Los puntos suspensivos (...) delante del parámetro definen una función variádica. Hagamos un programa que responda a los nombres de los Avengers que se proporcionan a una función.
Diseñamos un método sayHello que acepta un parámetro, names. Como agregamos puntos suspensivos (...) antes del tipo de datos: ...string, el argumento es una variable.
Go entiende que la función puede tomar cero, uno o muchos parámetros.
El parámetro names se envía al método sayHello como un segmento. Debido a que el tipo de datos es una cadena, el parámetro names se puede manejar dentro del cuerpo del método como una porción de cadenas ([]string).
Podemos usar el operador range para construir un bucle que itere a través de la porción de cadenas.
package main
import "fmt"
func main() {
sayHello()
sayHello("Iron Man")
sayHello("Thor", "Hulk", "Dr Strange", "Spiderman")
}
func sayHello(names ...string) {
for _, n := range names {
fmt.Printf("Hello %s\n", n)
}
Producción :
Hello Iron Man
Hello Thor
Hello Hulk
Hello Dr Strange
Hello Spiderman
Use tanto []string como ...string en Go
package main
import "fmt"
func f(args ...string) {
fmt.Println(len(args))
for i, s := range args {
fmt.Println(i, s)
}
}
func main() {
args := []string{"Hello", "Jay"}
f(args...)
}
Producción :
2
0 Hello
1 Jay
Artículo relacionado - Go Slice
- Cómo borrar un elemento de una rebanada en el Golang
- GoLang Ordenar segmento de estructuras
- Rebanada de copia de Golang
- Comprobar si un Slice contiene un elemento en Golang
- Crear un Slice vacío en Go