Go - Funzioni

Una funzione è un gruppo di istruzioni che insieme eseguono un'attività. Ogni programma Go ha almeno una funzione, ovveromain(). Puoi dividere il tuo codice in funzioni separate. Il modo in cui dividi il tuo codice tra le diverse funzioni dipende da te, ma logicamente, la divisione dovrebbe essere tale che ciascuna funzione svolga un compito specifico.

Una funzione declarationindica al compilatore il nome di una funzione, il tipo restituito e i parametri. Una funzionedefinition fornisce il corpo effettivo della funzione.

La libreria standard Go fornisce numerose funzioni incorporate che il programma può chiamare. Ad esempio, la funzionelen()accetta argomenti di vario tipo e restituisce la lunghezza del tipo. Se gli viene passata una stringa, la funzione restituisce la lunghezza della stringa in byte. Se gli viene passato un array, la funzione restituisce la lunghezza dell'array.

Le funzioni sono anche conosciute come method, sub-routine, o procedure.

Definizione di una funzione

La forma generale di una definizione di funzione nel linguaggio di programmazione Go è la seguente:

func function_name( [parameter list] ) [return_types]
{
   body of the function
}

Una definizione di funzione nel linguaggio di programmazione Go è costituita da un'intestazione di funzione e un corpo di funzione . Ecco tutte le parti di una funzione:

  • Func - Avvia la dichiarazione di una funzione.

  • Function Name- È il nome effettivo della funzione. Il nome della funzione e l'elenco dei parametri insieme costituiscono la firma della funzione.

  • Parameters- Un parametro è come un segnaposto. Quando viene richiamata una funzione, si passa un valore al parametro. Questo valore viene indicato come parametro o argomento effettivo. L'elenco dei parametri si riferisce al tipo, all'ordine e al numero dei parametri di una funzione. I parametri sono opzionali; ovvero, una funzione non può contenere parametri.

  • Return Type- Una funzione può restituire un elenco di valori. Return_types è l'elenco dei tipi di dati dei valori restituiti dalla funzione. Alcune funzioni eseguono le operazioni desiderate senza restituire un valore. In questo caso, return_type non è richiesto.

  • Function Body - Contiene una raccolta di istruzioni che definiscono cosa fa la funzione.

Esempio

Il codice sorgente seguente mostra una funzione chiamata max(). Questa funzione accetta due parametri num1 e num2 e restituisce il massimo tra i due -

/* function returning the max between two numbers */
func max(num1, num2 int) int {
   /* local variable declaration */
   result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

Chiamare una funzione

Durante la creazione di una funzione Go, dai una definizione di ciò che la funzione deve fare. Per utilizzare una funzione, dovrai chiamare quella funzione per eseguire l'attività definita.

Quando un programma richiama una funzione, il controllo del programma viene trasferito alla funzione chiamata. Una funzione chiamata esegue un'attività definita e quando viene eseguita la sua istruzione return o quando viene raggiunta la parentesi graffa di chiusura di fine funzione, restituisce il controllo del programma al programma principale.

Per chiamare una funzione, è sufficiente passare i parametri richiesti insieme al nome della funzione. Se la funzione restituisce un valore, è possibile memorizzare il valore restituito. Ad esempio:

package main

import "fmt"

func main() {
   /* local variable definition */
   var a int = 100
   var b int = 200
   var ret int

   /* calling a function to get max value */
   ret = max(a, b)

   fmt.Printf( "Max value is : %d\n", ret )
}

/* function returning the max between two numbers */
func max(num1, num2 int) int {
   /* local variable declaration */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

Abbiamo mantenuto la funzione max () insieme alla funzione main () e compilato il codice sorgente. Durante l'esecuzione dell'eseguibile finale, produrrebbe il seguente risultato:

Max value is : 200

Restituzione di più valori dalla funzione

Una funzione Go può restituire più valori. Ad esempio:

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}
func main() {
   a, b := swap("Mahesh", "Kumar")
   fmt.Println(a, b)
}

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

Kumar Mahesh

Argomenti della funzione

Se una funzione deve utilizzare argomenti, deve dichiarare variabili che accettano i valori degli argomenti. Queste variabili sono chiamateformal parameters della funzione.

I parametri formali si comportano come le altre variabili locali all'interno della funzione e vengono creati all'ingresso nella funzione e distrutti all'uscita.

Durante la chiamata a una funzione, ci sono due modi in cui gli argomenti possono essere passati a una funzione:

Suor n Tipo di chiamata e descrizione
1 Chiama per valore

Questo metodo copia il valore effettivo di un argomento nel parametro formale della funzione. In questo caso, le modifiche apportate al parametro all'interno della funzione non hanno effetto sull'argomento.

2 Chiama per riferimento

Questo metodo copia l'indirizzo di un argomento nel parametro formale. All'interno della funzione, l'indirizzo viene utilizzato per accedere all'argomento effettivo utilizzato nella chiamata. Ciò significa che le modifiche apportate al parametro influiscono sull'argomento.

Per impostazione predefinita, Go utilizza la chiamata per valore per passare gli argomenti. In generale, significa che il codice all'interno di una funzione non può alterare gli argomenti utilizzati per chiamare la funzione. Il programma precedente, mentre chiamava la funzione max (), utilizzava lo stesso metodo.

Utilizzo delle funzioni

Una funzione può essere utilizzata nei seguenti modi:

Suor n Uso e descrizione delle funzioni
1 Funzione come valore

Le funzioni possono essere create al volo e possono essere utilizzate come valori.

2 Funzione di chiusura

Le chiusure delle funzioni sono funzioni anonime e possono essere utilizzate nella programmazione dinamica.

3 Metodo

I metodi sono funzioni speciali con un ricevitore.