Go – Structure

struct là kiểu người dùng định nghĩa, chứa tập hợp các thuộc tính / trường được đặt tên. Nó được sử dụng để nhóm các dữ liệu được liên kết lại với nhau để tạo thành một đơn vị đơn. Bất kỳ một thực thể nào có một tập hợp các thuộc tính đều có thể được biểu diễn bằng struct. Nếu bạn hiểu biết về hướng đối tượng, bạn có thể coi struct như một class đơn giản có hỗ trợ các thành phần nhưng không có kế thừa.

Định nghĩa kiểu struct

Bạn có thể định nghĩa một kiểu struct mới như sau

Từ khóa type dùng để khai báo một kiểu mới. Tiếp theo sau nó là tên của kiểu – Person và từ khóa struct để biểu thị rằng chúng ta đang định nghĩa một struct. struct chứa danh sách các trường bên trong dấu ngoặc nhọn. Mỗi trường bao gồm tên và kiểu.

Bạn có thể thu gọn các trường cùng kiểu như sau:

Khai báo và khởi tạo struct

Khai báo biến kiểu struct

Giống như các kiểu dữ liệu khác, bạn có thể khai báo biến của kiểu struct như sau

Đoạn code bên trên tạo một biến kiểu Person với giá trị mặc định là 0 hoặc trống. Đối với một struct, các trường dựa theo kiểu của nó sẽ được thiết lập giá trị mặc định tương ứng. Nên các trường fistNamelastName được thiết lập bằng "", và Age được thiết lập bằng 0.

Khởi tạo struct

Bạn có thể khởi tạo một biến của kiểu struct sử dụng chữ struct như sau

Bạn cần thêm vào giá trị các trường theo đúng thứ tự mà chúng được khai báo trong struct. Do đó bạn không thể chỉ khởi tạo một trường con cúa struct bên trên

Đặt tên các trường khi khởi tạo struct

Go cũng hỗ trợ cú pháp tên: giá trị để khởi tạo một struct (thứ tự các trường sẽ không bắt buộc khi sử dụng cú pháp này)

Bạn có thể chia tách các trường bằng các xuống dòng để dễ đọc hơn (dấu phẩy là bắt buộc trong trường hợp này)

Cú pháp tên: giá trị cho phép chúng ta có thể chỉ khai báo một trường con trong các trường của struct. Tất cả các trường không được khởi tạo sẽ được thiết lập giá trị 0 hoặc “” tương ứng với kiểu trường

Sau đây là toàn bộ về ví dụ khai báo và khởi tạo một struct

Kết quả

Truy cập các trường của struct

Các bạn có thể truy cập từng trường của struct sử dụng toán tử dấu chấm (.)

Kết quả

Con trỏ đến một struct

Bạn có thể có được con trỏ đến một struct bằng cách sử dụng toán tử &

Kết quả

Go cho phép chúng ta truy cập trực tiếp vào các trường của struct thông qua con trỏ mà không cần truy cập rõ ràng vào vùng nhớ.

Tạo một struct và con trỏ sử dụng hàm new() có sẵn

Bạn cũng có thể sử dụng hàm new() có sẵn để tạo một instance của struct. Hàm new() cấp phát bộ nhớ cần thiết cho các trường của struct, khởi tạo giá trị các trường bằng 0 và trả về một con trỏ cho struct được cấp phát mới.

Kết quả

Export hoặc không Export struct và các trường của struct

Bất kỳ kiểu struct nào mà bắt đầu bằng ký tự viết hoa là được Export và có thể truy cập bên ngoài các package. Tương tự như vậy, bất kỳ trường nào của struct bắt đầu bằng ký tự viết hoa là được Export.

Ngược lại, tên được bắt đầu bằng ký tự viết thường chỉ có thể truy cập bên trong của cùng package.

Hãy cùng xem ví dụ sau, hay xem qua về cấu trúc phân cấp các package của một chương trình Go

customer.go

address.go

main.go

Bạn có thể thấy các tên addressmarried là không được Export và không thể truy cập tử package main

struct là kiểu giá trị

struct là kiểu giá trị. Khi bạn gán một biến struct cho một biến khác, một bản sao mới của struct được tạo và được gán. Tương tự như vậy, khi bạn truyền một struct cho một hàm, hàm sẽ nhận một bản sao của struct

Kết quả

So sánh bằng struct

Hai biến struct được cho là bằng nhau nếu tất cả các trường tương ứng là bằng nhau

Kết quả

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

avatar
  Subscribe  
Notify of