1. Tổng quan.
Trong ngôn ngữ lập trình Go, một struct (viết tắt của structure) được sử dụng để tạo ra một bộ sưu tập các thành viên có các kiểu dữ liệu khác nhau, gom chúng lại trong một biến duy nhất.
Trong khi mảng được sử dụng để lưu trữ nhiều giá trị cùng một kiểu dữ liệu vào một biến duy nhất, struct được sử dụng để lưu trữ nhiều giá trị có các kiểu dữ liệu khác nhau vào một biến duy nhất.
Một struct có thể hữu ích để nhóm các dữ liệu cùng nhau để tạo ra các bản ghi. Để khai báo một struct trong Go, bạn sử dụng các type
và struct
:
type TenStruct struct {
thanhVien1 kieuDuLieu1;
thanhVien2 kieuDuLieu2;
thanhVien3 kieuDuLieu3;
...
}
Ví dụ, ở đây chúng ta khai báo một struct có tên là Nguoi
với các thành viên sau: ten
, tuoi
, congViec
và luong
:
type Nguoi struct {
ten string
tuoi int
congViec string
luong int
}
Chú ý rằng các thành viên của struct có thể có các kiểu dữ liệu khác nhau, ví dụ ten
và congViec
có kiểu string, trong khi tuoi
và luong
có kiểu int.
2. Cách truy cập và sử dụng các thành viên của một struct.
Đầu tiên, chúng ta định nghĩa một struct có tên là Person
với các thành viên name
, age
, job
và salary
. Sau đó, chúng ta tạo hai biến pers1
và pers2
có kiểu dữ liệu là Person
.
type Person struct {
name string
age int
job string
salary int
}
var pers1 Person
var pers2 Person
Chúng ta gán giá trị cho từng thành viên của cả pers1
và pers2
.
pers1.name = "Hege"
pers1.age = 45
pers1.job = "Teacher"
pers1.salary = 6000
pers2.name = "Cecilie"
pers2.age = 24
pers2.job = "Marketing"
pers2.salary = 4500
Sử dụng dot operator (.
), chúng ta truy cập và in ra thông tin của cả pers1
và pers2
. Kết quả in ra màn hình sẽ là thông tin chi tiết về hai đối tượng Person
được khởi tạo.
fmt.Println("Name: ", pers1.name)
fmt.Println("Age: ", pers1.age)
fmt.Println("Job: ", pers1.job)
fmt.Println("Salary: ", pers1.salary)
fmt.Println("Name: ", pers2.name)
fmt.Println("Age: ", pers2.age)
fmt.Println("Job: ", pers2.job)
fmt.Println("Salary: ", pers2.salary)
3. Chuyển một struct làm đối số cho một hàm.
Chúng ta định nghĩa một struct có tên là Person
và tạo hai biến pers1
và pers2
kiểu Person
.
type Person struct {
name string
age int
job string
salary int
}
var pers1 Person
var pers2 Person
Gán giá trị cho các thành viên của pers1
và pers2
.
pers1.name = "Hege"
pers1.age = 45
pers1.job = "Teacher"
pers1.salary = 6000
pers2.name = "Cecilie"
pers2.age = 24
pers2.job = "Marketing"
pers2.salary = 4500
Chúng ta gọi hàm printPerson
và truyền biến pers1
và pers2
làm đối số.
printPerson(pers1)
printPerson(pers2)
Hàm printPerson
nhận một biến kiểu Person
làm đối số và in ra thông tin chi tiết của người đó.
func printPerson(pers Person) {
fmt.Println("Name: ", pers.name)
fmt.Println("Age: ", pers.age)
fmt.Println("Job: ", pers.job)
fmt.Println("Salary: ", pers.salary)
}
Kết quả khi chạy chương trình sẽ là in ra màn hình thông tin chi tiết về pers1
và pers2
thông qua hàm printPerson
.
Và đây là đoạn code tổng hợp từ các ví dụ trên.
package main
import ("fmt")
type Person struct {
name string
age int
job string
salary int
}
func main() {
var pers1 Person
var pers2 Person
// Pers1 specification
pers1.name = "Hege"
pers1.age = 45
pers1.job = "Teacher"
pers1.salary = 6000
// Pers2 specification
pers2.name = "Cecilie"
pers2.age = 24
pers2.job = "Marketing"
pers2.salary = 4500
// Print Pers1 info by calling a function
printPerson(pers1)
// Print Pers2 info by calling a function
printPerson(pers2)
}
func printPerson(pers Person) {
fmt.Println("Name: ", pers.name)
fmt.Println("Age: ", pers.age)
fmt.Println("Job: ", pers.job)
fmt.Println("Salary: ", pers.salary)
}
Kết quả.
Name: Hege
Age: 45
Job: Teacher
Salary: 6000
Name: Cecilie
Age: 24
Job: Marketing
Salary: 4500