Übergabe von Arrays an Funktionen in Go

Go-Arrays

In Go sind Arrays Werttypen. Wenn ein Array an eine Funktion übergeben wird, wird tatsächlich eine Kopie des Arrays übergeben.

Wenn Sie einen Array-Parameter an eine Funktion übergeben möchten, müssen Sie den formalen Parameter in der Funktionsdefinition als Array deklarieren. Wir können ihn auf die folgenden zwei Arten deklarieren:

Methode 1

Angeben der Array-Größe in den formalen Parametern:

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

Methode 2

Ohne Angabe der Array-Größe in den formalen Parametern:

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

Wenn Sie das ursprüngliche Array innerhalb einer Funktion ändern möchten, können Sie dies tun, indem Sie einen Zeiger auf das Array übergeben.

Beispiel

Betrachten wir das folgende Beispiel. In diesem Beispiel erhält die Funktion einen Integer-Array-Parameter, ein weiterer Parameter gibt die Anzahl der Elemente im Array an, und sie gibt den Durchschnittswert zurück:

Beispiel

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

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

   avg = sum / size

   return avg;
}

Als Nächstes rufen wir diese Funktion auf:

Beispiel

package main

import "fmt"

func main() {
   /* Die Array-Länge beträgt 5 */
   var  balance = [5]int {1000, 2, 3, 17, 50}
   var avg float32

   /* Das Array wird als Parameter an die Funktion übergeben */
   avg = getAverage( balance, 5 ) ;

   /* Den zurückgegebenen Durchschnitt ausgeben */
   fmt.Printf( "Durchschnittswert: %f ", avg );
}
func getAverage(arr [5]int, size int) float32 {
   var i,sum int
   var avg float32  

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

   avg = float32(sum) / float32(size)

   return avg;
}

Das Ausgabeergebnis des obigen Beispiels ist:

平均值为: 214.399994

Im obigen Beispiel haben die von uns verwendeten formalen Parameter die Arraygröße nicht angegeben.

Gleitkommaberechnungen können in der Ausgabe gewisse Abweichungen aufweisen; Sie können auch in einen ganzzahligen Typ konvertieren, um die Genauigkeit festzulegen.

Beispiel

package main
import (
    "fmt"
)
func main() {
    a := 1.69
    b := 1.7
    c := a * b      // Das Ergebnis sollte 2.873 sein
    fmt.Println(c)  // Die Ausgabe ist 2.8729999999999998
}

Feste Genauigkeit festlegen:

Beispiel

package main
import (
    "fmt"
)
func main() {
    a := 1690           // Stellt 1.69 dar
    b := 1700           // Stellt 1.70 dar
    c := a * b          // Das Ergebnis sollte 2873000 sein, was 2.873 darstellt
    fmt.Println(c)      // Interne Kodierung
    fmt.Println(float64(c) / 1000000) // Anzeigen
}

Wenn Sie das ursprüngliche Array innerhalb einer Funktion ändern möchten, können Sie dies tun, indem Sie einen Zeiger auf das Array übergeben.

Das folgende Beispiel zeigt, wie man ein Array an eine Funktion übergibt. Die Funktion akzeptiert ein Array und einen Zeiger auf das Array als Parameter:

Beispiel

package main

import "fmt"

// Die Funktion akzeptiert ein Array als Parameter.
func modifyArray(arr [5]int) {
    for i := 0; i < len(arr); i++ {
        arr[i] = arr[i] * 2
    }
}

// Die Funktion akzeptiert einen Zeiger auf ein Array als Parameter.
func modifyArrayWithPointer(arr *[5]int) {
    for i := 0; i < len(*arr); i++ {
        (*arr)[i] = (*arr)[i] * 2
    }
}

func main() {
    // Erstellen Sie ein Integer-Array mit 5 Elementen.
    myArray := [5]int{1, 2, 3, 4, 5}

    fmt.Println("Ursprüngliches Array:", myArray)

    // Das Übergeben eines Arrays an eine Funktion ändert nicht den Wert des ursprünglichen Arrays.
    modifyArray(myArray)
    fmt.Println("Array nach modifyArray:", myArray)

    // Das Übergeben eines Zeigers auf ein Array an eine Funktion kann den Wert des ursprünglichen Arrays ändern.
    modifyArrayWithPointer(&myArray)
    fmt.Println("Array nach modifyArrayWithPointer:", myArray)
}

Im obigen Beispiel nimmt die Funktion modifyArray ein Array entgegen und versucht, die Werte des Arrays zu ändern, aber nachdem sie in der main-Funktion aufgerufen wurde, wurde das ursprüngliche Array nicht geändert. Im Gegensatz dazu akzeptiert die Funktion modifyArrayWithPointer einen Zeiger auf das Array und ändert die Werte des ursprünglichen Arrays über den Zeiger.

Das Ausgabeergebnis des obigen Beispiels ist:

Original Array: [1 2 3 4 5]
Array after modifyArray: [1 2 3 4 5]
Array after modifyArrayWithPointer: [2 4 6 8 10]

Go-Arrays

Weitere Erweiterungen