Go-structures

提供:Dev Guides
移動先:案内検索

Go-構造

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

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

  • タイトル
  • 著者
  • 件名
  • ブックID

このようなシナリオでは、構造は非常に便利です。

構造の定義

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

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

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

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

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

構造体のメンバーにアクセスするには、* member access operator(。)を使用します。memberaccess 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