이동-구조물

Go 배열을 사용하면 동일한 종류의 여러 데이터 항목을 보유 할 수있는 변수를 정의 할 수 있습니다. Structure Go 프로그래밍에서 사용할 수있는 또 다른 사용자 정의 데이터 유형으로, 다양한 종류의 데이터 항목을 결합 할 수 있습니다.

구조는 레코드를 나타내는 데 사용됩니다. 도서관에있는 책을 추적하고 싶다고 가정 해 보겠습니다. 각 책의 다음 속성을 추적 할 수 있습니다.

  • Title
  • Author
  • Subject
  • 도서 ID

이러한 시나리오에서 구조는 매우 유용합니다.

구조 정의

구조를 정의하려면 다음을 사용해야합니다. typestruct진술. 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