Go-構造

Go配列を使用すると、同じ種類の複数のデータ項目を保持できる変数を定義できます。 Structure は、Goプログラミングで使用できるもう1つのユーザー定義データ型であり、さまざまな種類のデータ項目を組み合わせることができます。

構造は、レコードを表すために使用されます。図書館の本を追跡したいとします。各本の次の属性を追跡することをお勧めします-

  • Title
  • Author
  • Subject
  • ブックID

このようなシナリオでは、構造は非常に役立ちます。

構造の定義

構造を定義するには、次を使用する必要があります type そして structステートメント。structステートメントは、プログラムの複数のメンバーを持つ新しいデータ型を定義します。typeステートメントは、名前を、この場合はstructである型にバインドします。structステートメントの形式は次のとおりです-

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

構造型が定義されると、次の構文を使用してその型の変数を宣言するために使用できます。

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

構造体メンバーへのアクセス

構造体の任意のメンバーにアクセスするには、 member access operator (.).メンバーアクセス演算子は、構造変数名とアクセスする構造メンバーの間のピリオドとしてコード化されます。あなたは使用しますstruct構造タイプの変数を定義するキーワード。次の例は、構造の使用方法を説明しています-

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)
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

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

関数の引数としての構造

他の変数やポインタを渡すのと非常によく似た方法で、構造体を関数の引数として渡すことができます。上記の例で行ったのと同じ方法で構造変数にアクセスします-

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);
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

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

構造体へのポインタ

次のように他の変数へのポインタを定義するのと同じ方法で、構造体へのポインタを定義できます。

var struct_pointer *Books

これで、構造体変数のアドレスを上記で定義したポインタ変数に格納できます。構造体変数のアドレスを見つけるには、次のように構造体の名前の前に&演算子を置きます。

struct_pointer = &Book1;

構造体へのポインタを使用して構造体のメンバーにアクセスするには、「。」を使用する必要があります。次のように演算子-

struct_pointer.title;

構造体ポインタを使用して上記の例を書き直してみましょう-

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);
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

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