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