Vai - Strutture

Gli array Go consentono di definire variabili che possono contenere diversi elementi di dati dello stesso tipo. Structure è un altro tipo di dati definito dall'utente disponibile nella programmazione Go, che consente di combinare elementi di dati di diversi tipi.

Le strutture vengono utilizzate per rappresentare un record. Supponi di voler tenere traccia dei libri in una biblioteca. Potresti voler monitorare i seguenti attributi di ogni libro:

  • Title
  • Author
  • Subject
  • ID libro

In uno scenario del genere, le strutture sono molto utili.

Definizione di una struttura

Per definire una struttura, è necessario utilizzare type e structdichiarazioni. L'istruzione struct definisce un nuovo tipo di dati, con più membri per il programma. L'istruzione type lega un nome con il tipo che è struct nel nostro caso. Il formato dell'istruzione struct è il seguente:

type struct_variable_type struct {
   member definition;
   member definition;
   ...
   member definition;
}

Una volta definito un tipo di struttura, è possibile utilizzarlo per dichiarare le variabili di quel tipo utilizzando la sintassi seguente.

variable_name := structure_variable_type {value1, value2...valuen}

Accesso ai membri della struttura

Per accedere a qualsiasi membro di una struttura, utilizziamo il member access operator (.).L'operatore di accesso ai membri è codificato come un periodo tra il nome della variabile di struttura e il membro della struttura a cui si desidera accedere. Userestistructparola chiave per definire variabili di tipo struttura. Il seguente esempio spiega come utilizzare una struttura:

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books    /* Declare Book1 of type Book */
   var Book2 Books    /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   fmt.Printf( "Book 1 title : %s\n", Book1.title)
   fmt.Printf( "Book 1 author : %s\n", Book1.author)
   fmt.Printf( "Book 1 subject : %s\n", Book1.subject)
   fmt.Printf( "Book 1 book_id : %d\n", Book1.book_id)

   /* print Book2 info */
   fmt.Printf( "Book 2 title : %s\n", Book2.title)
   fmt.Printf( "Book 2 author : %s\n", Book2.author)
   fmt.Printf( "Book 2 subject : %s\n", Book2.subject)
   fmt.Printf( "Book 2 book_id : %d\n", Book2.book_id)
}

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

Book 1 title      : Go Programming
Book 1 author     : Mahesh Kumar
Book 1 subject    : Go Programming Tutorial
Book 1 book_id    : 6495407
Book 2 title      : Telecom Billing
Book 2 author     : Zara Ali
Book 2 subject    : Telecom Billing Tutorial
Book 2 book_id    : 6495700

Strutture come argomenti di funzione

Puoi passare una struttura come argomento di una funzione in modo molto simile quando passi qualsiasi altra variabile o puntatore. Accederesti alle variabili di struttura nello stesso modo in cui hai fatto nell'esempio precedente:

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books    /* Declare Book1 of type Book */
   var Book2 Books    /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   printBook(Book1)

   /* print Book2 info */
   printBook(Book2)
}
func printBook( book Books ) {
   fmt.Printf( "Book title : %s\n", book.title);
   fmt.Printf( "Book author : %s\n", book.author);
   fmt.Printf( "Book subject : %s\n", book.subject);
   fmt.Printf( "Book book_id : %d\n", book.book_id);
}

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

Book title     : Go Programming
Book author    : Mahesh Kumar
Book subject   : Go Programming Tutorial
Book book_id   : 6495407
Book title     : Telecom Billing
Book author    : Zara Ali
Book subject   : Telecom Billing Tutorial
Book book_id   : 6495700

Puntatori alle strutture

Puoi definire i puntatori a strutture nello stesso modo in cui definisci il puntatore a qualsiasi altra variabile come segue:

var struct_pointer *Books

Ora è possibile memorizzare l'indirizzo di una variabile di struttura nella variabile puntatore definita sopra. Per trovare l'indirizzo di una variabile di struttura, inserire l'operatore & prima del nome della struttura come segue:

struct_pointer = &Book1;

Per accedere ai membri di una struttura utilizzando un puntatore a tale struttura, è necessario utilizzare il "." operatore come segue -

struct_pointer.title;

Riscriviamo l'esempio precedente usando il puntatore alla struttura -

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books   /* Declare Book1 of type Book */
   var Book2 Books   /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   printBook(&Book1)

   /* print Book2 info */
   printBook(&Book2)
}
func printBook( book *Books ) {
   fmt.Printf( "Book title : %s\n", book.title);
   fmt.Printf( "Book author : %s\n", book.author);
   fmt.Printf( "Book subject : %s\n", book.subject);
   fmt.Printf( "Book book_id : %d\n", book.book_id);
}

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

Book title     : Go Programming
Book author    : Mahesh Kumar
Book subject   : Go Programming Tutorial
Book book_id   : 6495407
Book title     : Telecom Billing
Book author    : Zara Ali
Book subject   : Telecom Billing Tutorial
Book book_id   : 6495700