21 votes

passer un tableau par référence dans golang

Je viens d'un environnement C et passer un tableau en style C provoque une erreur.

aidez-nous

package main
import "fmt"

func f(a *int){
  fmt.Println(a[1])
}

func main(){
  var a [100]int
  a[1]=100
  f(a)
}

Erreur : : ne peut pas utiliser un (type [100]int) comme type *int en argument de f

29voto

jxstanford Points 983

Comme d'autres l'ont mentionné dans les commentaires, vous souhaitez probablement utiliser une tranche plutôt qu'un tableau. Les tranches sont déjà transmises par référence, il n'est donc pas nécessaire de spécifier des pointeurs. Le site make L'instruction ci-dessous crée une tranche d'ints (soutenue par un tableau). Dans le code ci-dessous, je lui ai donné une longueur de 2 et une capacité de 100 afin de satisfaire votre objectif d'assigner à l'indice 1.

import (
    "fmt"
)

func f(a []int) {
    fmt.Println(a[1])
}

func main() {
    a := make([]int, 2, 100)
    a[1] = 100
    f(a)
}

2voto

Vutuz Points 132

Vous devez utiliser une tranche au lieu d'un tableau comme argument de la fonction. par exemple :

func p(a int){
fmt.Println(a)
}
func main() {
    var a = make([]int,2,10) //2 is length, 10 is capacity
    a[0] = 10
    p(a[0])
}

le tableau est un type de valeur, la tranche est un type de référence. pour en savoir plus, consultez le site https://blog.golang.org/go-slices-usage-and-internals

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X