Go - Cấu trúc

Mảng Go cho phép bạn xác định các biến có thể chứa một số mục dữ liệu cùng loại. Structure là một kiểu dữ liệu khác do người dùng xác định có sẵn trong lập trình Go, cho phép bạn kết hợp các loại mục dữ liệu khác nhau.

Các cấu trúc được sử dụng để biểu diễn một bản ghi. Giả sử bạn muốn theo dõi các cuốn sách trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau của mỗi cuốn sách:

  • Title
  • Author
  • Subject
  • ID sách

Trong một tình huống như vậy, các cấu trúc rất hữu ích.

Xác định cấu trúc

Để xác định cấu trúc, bạn phải sử dụng typestructcác câu lệnh. Câu lệnh struct xác định một kiểu dữ liệu mới, với nhiều thành viên cho chương trình của bạn. Trong trường hợp của chúng ta, câu lệnh type liên kết tên với kiểu là struct. Định dạng của câu lệnh struct như sau:

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

Khi một kiểu cấu trúc được xác định, nó có thể được sử dụng để khai báo các biến của kiểu đó bằng cú pháp sau.

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

Truy cập thành viên cấu trúc

Để truy cập bất kỳ thành viên nào của một cấu trúc, chúng tôi sử dụng member access operator (.).Toán tử truy cập thành viên được mã hóa là dấu chấm giữa tên biến cấu trúc và thành viên cấu trúc mà chúng ta muốn truy cập. Bạn sẽ sử dụngstructtừ khóa để xác định các biến của kiểu cấu trúc. Ví dụ sau giải thích cách sử dụng cấu trúc:

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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

Cấu trúc dưới dạng đối số hàm

Bạn có thể truyền một cấu trúc dưới dạng đối số hàm theo cách tương tự như khi bạn truyền bất kỳ biến hoặc con trỏ nào khác. Bạn sẽ truy cập các biến cấu trúc theo cách giống như cách bạn đã làm trong ví dụ trên -

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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

Con trỏ đến cấu trúc

Bạn có thể xác định con trỏ đến cấu trúc giống như cách bạn xác định con trỏ cho bất kỳ biến nào khác như sau:

var struct_pointer *Books

Bây giờ, bạn có thể lưu trữ địa chỉ của một biến cấu trúc trong biến con trỏ đã xác định ở trên. Để tìm địa chỉ của một biến cấu trúc, hãy đặt toán tử & trước tên của cấu trúc như sau:

struct_pointer = &Book1;

Để truy cập các thành viên của một cấu trúc bằng cách sử dụng con trỏ đến cấu trúc đó, bạn phải sử dụng dấu "." toán tử như sau -

struct_pointer.title;

Hãy để chúng tôi viết lại ví dụ trên bằng cách sử dụng con trỏ cấu trúc -

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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