Go - Passaggio di array alle funzioni

Se vuoi passare un array monodimensionale come argomento in una funzione, dovresti dichiarare il parametro formale della funzione in uno dei due modi seguenti e tutti i due metodi di dichiarazione producono risultati simili perché ognuno dice al compilatore che sta andando un array intero da ricevere. In modo simile è possibile passare array multidimensionali come parametri formali.

Way-1

Parametri formali come un array dimensionato come segue:

void myFunction(param [10]int)
{
.
.
.
}

Way-2

Parametri formali come array non dimensionati come segue:

void myFunction(param []int)
{
.
.
.
}

Esempio

Ora, considera la seguente funzione, che prenderà un array come argomento insieme a un altro argomento e in base agli argomenti passati, restituirà la media dei numeri passati attraverso l'array come segue:

func getAverage(arr []int, int size) float32 {
   var i int
   var avg, sum float32  

   for i = 0; i < size; ++i {
      sum += arr[i]
   }

   avg = sum / size
   return avg;
}

Ora, chiamiamo la funzione sopra come segue:

package main

import "fmt"

func main() {
   /* an int array with 5 elements */
   var  balance = []int {1000, 2, 3, 17, 50}
   var avg float32

   /* pass array as an argument */
   avg = getAverage( balance, 5 ) ;

   /* output the returned value */
   fmt.Printf( "Average value is: %f ", avg );
}
func getAverage(arr []int, size int) float32 {
   var i,sum int
   var avg float32  

   for i = 0; i < size;i++ {
      sum += arr[i]
   }

   avg = float32(sum / size)
   return avg;
}

Quando il codice precedente viene compilato insieme ed eseguito, produce il seguente risultato:

Average value is: 214.400000

Come puoi vedere, la lunghezza dell'array non ha importanza per quanto riguarda la funzione perché Go non esegue il controllo dei limiti per i parametri formali.