Diferencia entre []String y ...String en Go
-
Definir una rebanada usando
[]string
en Go -
Definir una función variádica usando
...string
en Go -
Use tanto
[]string
como...string
en 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