A forma mais básica de passarmos um vetor como argumento para uma função é por valor. Vale lembrar que quando essa
abordagem é utilizada, alterando o valor de um elemento do vetor não irá refletir na variável que foi passada como
argumento.
Sintaxe F
func nome_funcao(param [dimensao]tipo_dado,tamanho int) (tipo_retorno){ /*corpo*/}
func nome_funcao(param []tipo_dado) (tipo_retorno){ /*corpo*/}
Sintaxe G
nome_funcao(nome_vetor)
As sintaxe F e G acima mostram a declaração de um protótipo de uma função e a passagem de uma vetor como argumento
respectivamente.
Exemplo 8
package main
import "fmt"
func funcao1(vstr []string) {
for i := 0; i < len(vstr); i++ {
fmt.Printf(vstr[i])
}
}
func funcao2(vstr [3]string, tamanho int) {
for i := 0; i < tamanho; i++ {
fmt.Printf(vstr[i])
}
}
func main() {
vstr1 := []string{"1", "2", "3"}
vstr2 := [3]string{"1", "2", "3"}
funcao1(vstr1)
funcao2(vstr2, 3)
}
Saída
123123
Para que seja possível a persistência de uma alteração feita em um vetor, sendo esse acessado dentro de uma função
ou método, é necessário fazer a passagem do vetor, como argumento, por referência utilizando o operador (&).
Sintaxe H
func nome_funcao(param *[dimensao]tipo_dado, tamanho) (tipo_retorno){ /*corpo*/}
func nome_funcao(param *[dimensao]tipo_dado) (tipo_retorno){ /*corpo*/}
Sintaxe I
nome_funcao(&nome_vetor)
As sintaxe A e B acima mostram a declaração de um protótipo de uma função e a passagem de uma vetor como argumento
respectivamente.
Exemplo 9
package main
import "fmt"
func funcao(param *[4]int) {
for i := 0; i < len(param); i++ {
param[i] *= 2
}
}
func main() {
var vint = [4]int{1, 2, 3, 4}
fmt.Println("antes:", vint)
funcao(&vint)
fmt.Println("depois:", vint)
}
Saída
antes: [1 2 3 4]
depois: [2 4 6 8]
O retorno de vetores em funções é feito da mesma forma como qualquer outro tipo de dado já visto. Declaramos
o tipo de retorno no protótipo da função como vetor com ou sem sua dimensão.
Sintaxe J
func nome_funcao(parametros) (nome_retorno [dimensao]tipo_dado)
func nome_funcao(parametros) ( [dimensao]tipo_dado)
func nome_funcao(parametros) (nome_retorno []tipo_dado)
func nome_funcao(parametros) ( []tipo_dado)
Exemplo 10
package main
import "fmt"
func funcao1() (vetor []int) {
vetor = []int{1, 2, 3, 4}
return
}
func funcao2() [4]int {
vetor := [4]int{1, 2, 3, 4}
return vetor
}
func main() {
vint1 := funcao1()
fmt.Println(vint1)
vint2 := funcao2()
fmt.Println(vint2)
}