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. Kết cấu 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:
- Tiêu đề
- Tác giả
- Môn học
- Mã sách
Trong một kịch bản như vậy, các cấu trúc rất hữu ích.
Xác định cấu trúc
Mục lục
Để xác định một cấu trúc, bạn phải sử dụng loại hình và cấu trúc cá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. Câu lệnh type liên kết tên với kiểu là struct trong trường hợp của chúng ta. Đị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 toán tử truy cập thành viên (.). 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ụng cấu trúc từ 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 như một đối số của 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 định nghĩa 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 một 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
