Go 언어 구조


Go 언어의 배열은 동일한 유형의 데이터를 저장할 수 있지만 구조에서는 항목마다 다른 데이터 유형을 정의할 수 있습니다.

구조란 동일한 유형 또는 다른 유형의 일련의 데이터로 구성된 데이터 모음입니다.

구조는 도서관에 책 기록을 저장하는 것과 같은 기록을 나타냅니다. 각 책에는 다음과 같은 속성이 있습니다.

  • 제목: 제목

  • 저자: 저자

  • 제목: 제목

  • ID: 도서 ID


구조 정의

구조 정의에는 type 및 struct 문을 사용해야 합니다. struct 문은 새로운 데이터 유형을 정의하며 구조에는 하나 이상의 멤버가 있습니다. type 문은 구조의 이름을 설정합니다. 구조체의 형식은 다음과 같습니다.

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

구조체 유형이 정의되면 변수 선언에 사용할 수 있습니다. 구문 형식은 다음과 같습니다.

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

구조에 접근합니다. 멤버

구조 멤버에 액세스하려면 "구조.멤버 이름" 형식으로 점(.) 연산자를 사용해야 합니다.

구조체 유형 변수는 struct 키워드를 사용하여 정의됩니다. 예는 다음과 같습니다.

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}

func main() {
   var Book1 Books        /* 声明 Book1 为 Books 类型 */
   var Book2 Books        /* 声明 Book2 为 Books 类型 */

   /* book 1 描述 */
   Book1.title = "Go 语言"
   Book1.author = "www.php.cn"
   Book1.subject = "Go 语言教程"
   Book1.book_id = 6495407

   /* book 2 描述 */
   Book2.title = "Python 教程"
   Book2.author = "www.php.cn"
   Book2.subject = "Python 语言教程"
   Book2.book_id = 6495700

   /* 打印 Book1 信息 */
   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)

   /* 打印 Book2 信息 */
   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 语言
Book 1 author : www.php.cn
Book 1 subject : Go 语言教程
Book 1 book_id : 6495407
Book 2 title : Python 教程
Book 2 author : www.php.cn
Book 2 subject : Python 语言教程
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        /* 声明 Book1 为 Books 类型 */
   var Book2 Books        /* 声明 Book2 为 Books 类型 */

   /* book 1 描述 */
   Book1.title = "Go 语言"
   Book1.author = "www.php.cn"
   Book1.subject = "Go 语言教程"
   Book1.book_id = 6495407

   /* book 2 描述 */
   Book2.title = "Python 教程"
   Book2.author = "www.php.cn"
   Book2.subject = "Python 语言教程"
   Book2.book_id = 6495700

   /* 打印 Book1 信息 */
   printBook(Book1)

   /* 打印 Book2 信息 */
   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 语言
Book author : www.php.cn
Book subject : Go 语言教程
Book book_id : 6495407
Book title : Python 教程
Book author : www.php.cn
Book subject : Python 语言教程
Book book_id : 6495700

구조 포인터

를 정의할 수 있습니다. 구조체에 대한 포인터 포인터는 다른 포인터 변수와 유사하며 형식은 다음과 같습니다.

var struct_pointer *Books

위에 정의된 포인터 변수는 구조체 변수의 주소를 저장할 수 있습니다. 구조 변수 주소를 보려면 구조 변수 앞에 & 기호를 배치할 수 있습니다:

struct_pointer = &Book1;

구조 포인터를 사용하여 구조 멤버에 액세스하고 "." 연산자를 사용합니다:

struct_pointer.title;

Next let 구조 포인터를 사용하여 위의 예제를 다시 작성합니다. 코드는 다음과 같습니다.

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 描述 */
   Book1.title = "Go 语言"
   Book1.author = "www.php.cn"
   Book1.subject = "Go 语言教程"
   Book1.book_id = 6495407

   /* book 2 描述 */
   Book2.title = "Python 教程"
   Book2.author = "www.php.cn"
   Book2.subject = "Python 语言教程"
   Book2.book_id = 6495700

   /* 打印 Book1 信息 */
   printBook(&Book1)

   /* 打印 Book2 信息 */
   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 语言
Book author : www.php.cn
Book subject : Go 语言教程
Book book_id : 6495407
Book title : Python 教程
Book author : www.php.cn
Book subject : Python 语言教程
Book book_id : 6495700