1. Tổng quan.
Trước hết, chúng ta cùng hiểu về mảng trong ngôn ngữ lập trình Go. Mảng được sử dụng để lưu trữ nhiều giá trị có cùng loại trong một biến duy nhất thay vì phải khai báo các biến riêng lẻ cho từng giá trị.
2. Cú pháp khai báo mảng.
Để khai báo một mảng trong Go, có hai cách chính:
Khai báo với var
.
var array_name = [length]datatype{values} // here length is defined
or
var array_name = [...]datatype{values} // here length is inferred
Khai báo với :=
(viết gọn):
array_name := [length]datatype{values} // here length is defined
or
array_name := [...]datatype{values} // here length is inferred
Chú ý, số phần tử (length) xác định số lượng phần tử mà mảng có thể chứa. Trong Go, mảng có số phần tử cố định, nghĩa là số lượng phần tử không thể thay đổi sau khi mảng được khai báo. Số phần tử của mảng có thể được chỉ định bằng một con số hoặc có thể được tự động nhận diện dựa trên số lượng giá trị được cung cấp.
2. Khai báo mảng với số phần tử cố định.
package main
import ("fmt")
func main() {
var arr1 = [3]int{1,2,3}
arr2 := [5]int{4,5,6,7,8}
fmt.Println(arr1)
fmt.Println(arr2)
}
- Khai báo và khởi tạo mảng:
- Dòng
var arr1 = [3]int{1,2,3}
khai báo một mảng có tên làarr1
với số phần tử là 3 và kiểu dữ liệu làint
. Mảng này được khởi tạo với các giá trị 1, 2, và 3. - Dòng
arr2 := [5]int{4,5,6,7,8}
sử dụng cách khai báo ngắn gọn (:=) để khai báo và khởi tạo một mảng có tên làarr2
với số phần tử là 5 và kiểu dữ liệu làint
. Mảng này được khởi tạo với các giá trị 4, 5, 6, 7, và 8.
- Dòng
- In ra giá trị của mảng:
- Dòng
fmt.Println(arr1)
in ra giá trị của mảngarr1
. - Dòng
fmt.Println(arr2)
in ra giá trị của mảngarr2
.
- Dòng
- Kết quả:
- Khi chạy chương trình, kết quả được hiển thị là:
[1 2 3]
[4 5 6 7 8]
Điều này cho thấy giá trị của mảng arr1
và arr2
được in ra màn hình theo đúng thứ tự.
3. Khai báo mảng với số phần tử tự động xác định.
Đoạn code dưới đây trình bày cách khai báo mảng trong ngôn ngữ lập trình Go với số phần tử được tự động nhận diện.
package main
import ("fmt")
func main() {
var arr1 = [...]int{1,2,3}
arr2 := [...]int{4,5,6,7,8}
fmt.Println(arr1)
fmt.Println(arr2)
}
Dưới đây là phân tích chi tiết:
- Khai báo và khởi tạo mảng:
- Dòng
var arr1 = [...]int{1,2,3}
khai báo một mảng có tên làarr1
và kiểu dữ liệu làint
. Go sẽ tự động nhận diện số phần tử của mảng dựa trên số lượng giá trị được cung cấp, nên ở đây mảngarr1
có số phần tử là 3. - Dòng
arr2 := [...]int{4,5,6,7,8}
sử dụng cách khai báo ngắn gọn để khai báo và khởi tạo mảngarr2
. Tương tự, số phần tử của mảngarr2
cũng được tự động phát hiện là 5.
- Dòng
- In ra giá trị của mảng:
- Dòng
fmt.Println(arr1)
in ra giá trị của mảngarr1
. - Dòng
fmt.Println(arr2)
in ra giá trị của mảngarr2
.
- Dòng
Kết quả.
[1 2 3]
[4 5 6 7 8]
Cả hai mảng arr1
và arr2
được in ra màn hình với giá trị tương ứng.
4. Khai báo mảng với giá trị là chuỗi (string).
package main
import ("fmt")
func main() {
var cars = [4]string{"Volvo", "BMW", "Ford", "Mazda"}
fmt.Print(cars)
}
- Khai báo và khởi tạo mảng chuỗi:
- Dòng
var cars = [4]string{"Volvo", "BMW", "Ford", "Mazda"}
khai báo một mảng có tên làcars
với số phần tử là 4 và kiểu dữ liệu làstring
. Mảng này được khởi tạo với bốn chuỗi khác nhau là “Volvo”, “BMW”, “Ford” và “Mazda”.
- Dòng
- In ra giá trị của mảng chuỗi:
- Dòng
fmt.Print(cars)
in ra giá trị của mảngcars
.
- Dòng
- Kết quả:
- Khi chạy chương trình, kết quả được hiển thị là:
[Volvo BMW Ford Mazda]
- Điều này cho thấy giá trị của mảng chuỗi
cars
được in ra màn hình theo đúng thứ tự.
5. Cách truy cập các phần tử của một mảng.
package main
import ("fmt")
func main() {
prices := [3]int{10,20,30}
fmt.Println(prices[0])
fmt.Println(prices[2])
}
Dòng prices := [3]int{10, 20, 30}
khai báo một mảng có tên là prices
với số phần tử là 3 và kiểu dữ liệu là int
. Mảng này được khởi tạo với ba giá trị là 10, 20, và 30.
Dòng fmt.Println(prices[0])
in ra giá trị của phần tử đầu tiên trong mảng prices
. Lưu ý rằng trong mảng, index bắt đầu từ 0, nên prices[0]
là phần tử đầu tiên.
Dòng fmt.Println(prices[2])
in ra giá trị của phần tử thứ ba trong mảng prices
.
Kết quả được hiển thị là:
10
30
Điều này cho thấy cách truy cập và in ra giá trị của các phần tử trong mảng.
Nhớ rằng trong Go, chỉ số (index) của mảng bắt đầu từ 0 và bạn có thể truy cập các phần tử của mảng bằng cách sử dụng chỉ số tương ứng.
6. Thay đổi giá trị của một phần tử cụ thể trong một mảng.
package main
import ("fmt")
func main() {
prices := [3]int{10,20,30}
prices[2] = 50
fmt.Println(prices)
}
Dưới đây là phân tích chi tiết:
- Khai báo và khởi tạo mảng:
- Dòng
prices := [3]int{10, 20, 30}
khai báo một mảng có tên làprices
với số phần tử là 3 và kiểu dữ liệu làint
. Mảng này được khởi tạo với ba giá trị là 10, 20, và 30.
- Dòng
- Thay đổi giá trị của một phần tử:
- Dòng
prices[2] = 50
thay đổi giá trị của phần tử thứ ba trong mảngprices
thành 50.
- Dòng
- In ra mảng sau khi thay đổi:
- Dòng
fmt.Println(prices)
in ra mảngprices
sau khi giá trị của phần tử thứ ba đã được thay đổi.
- Dòng
Kết quả.
[10 20 50]
Điều này cho thấy giá trị của phần tử thứ ba trong mảng đã được thay đổi thành 50. Như đã thấy, bạn có thể thay đổi giá trị của bất kỳ phần tử nào trong mảng bằng cách sử dụng chỉ số của nó.
7. Khởi tạo mảng với giá trị mặc định của các phần không được tạo.
package main
import ("fmt")
func main() {
arr1 := [5]int{} //not initialized
arr2 := [5]int{1,2} //partially initialized
arr3 := [5]int{1,2,3,4,5} //fully initialized
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
}
- Khởi tạo mảng:
- Dòng
arr1 := [5]int{}
khai báo và khởi tạo một mảng có tên làarr1
với số phần tử là 5 và kiểu dữ liệu làint
. Trong trường hợp này, mảng được khởi tạo nhưng không có giá trị cụ thể, vì vậy tất cả các phần tử của mảngarr1
sẽ được gán giá trị mặc định của kiểu dữ liệuint
, là 0. - Dòng
arr2 := [5]int{1,2}
khai báo và khởi tạo một mảngarr2
với số phần tử là 5, nhưng chỉ có hai phần tử được cung cấp giá trị. Các phần tử còn lại sẽ nhận giá trị mặc định của kiểu dữ liệuint
, là 0. - Dòng
arr3 := [5]int{1,2,3,4,5}
khai báo và khởi tạo một mảngarr3
với số phần tử là 5 và tất cả các phần tử đều có giá trị được chỉ định.
- Dòng
- In ra giá trị của mảng:
- Dòng
fmt.Println(arr1)
,fmt.Println(arr2)
, vàfmt.Println(arr3)
in ra giá trị của các mảng tương ứng.
- Dòng
Kết quả.
[0 0 0 0 0]
[1 2 0 0 0]
[1 2 3 4 5]
Điều này thể hiện giá trị của các mảng sau khi được khởi tạo, đồng thời làm rõ rằng các phần tử chưa được khởi tạo sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng.
Thông thường, khi một mảng không được khởi tạo, các phần tử của nó sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng. Điều này quan trọng để tránh lỗi do đọc giá trị từ mảng chưa được khởi tạo.
8. Khởi mảng và chỉ gán một số phần tử cụ thể.
package main
import ("fmt")
func main() {
arr1 := [5]int{1:10,2:40}
fmt.Println(arr1)
}
- Khởi tạo mảng với chỉ một số phần tử cụ thể:
- Dòng
arr1 := [5]int{1:10, 2:40}
khai báo và khởi tạo một mảng có tên làarr1
với số phần tử là 5 và kiểu dữ liệu làint
. Trong trường hợp này, chỉ có hai phần tử của mảng được khởi tạo với giá trị cụ thể. - Phần tử thứ hai của mảng (
arr1[1]
) được gán giá trị 10. - Phần tử thứ ba của mảng (
arr1[2]
) được gán giá trị 40. - Các phần tử còn lại của mảng sẽ nhận giá trị mặc định của kiểu dữ liệu
int
, là 0.
- Dòng
- In ra giá trị của mảng:
- Dòng
fmt.Println(arr1)
in ra giá trị của mảngarr1
.
- Dòng
Kết quả.
[0 10 40 0 0]
Trong ví dụ này, cú pháp index: value
được sử dụng để chỉ định giá trị cho một phần tử cụ thể trong mảng. Các phần tử không được chỉ định giá trị sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng.
9. Xác định số phần tử của mảng.
Đoạn code dưới đây sẽ sử dụng hàm len()
để xác định số phần tử của mảng trong ngôn ngữ lập trình Go.
package main
import ("fmt")
func main() {
arr1 := [4]string{"Volvo", "BMW", "Ford", "Mazda"}
arr2 := [...]int{1,2,3,4,5,6}
fmt.Println(len(arr1))
fmt.Println(len(arr2))
}
- Khai báo và khởi tạo mảng:
- Dòng
arr1 := [4]string{"Volvo", "BMW", "Ford", "Mazda"}
khai báo và khởi tạo một mảng có tên làarr1
với số phần tử là 4 và kiểu dữ liệu làstring
. - Dòng
arr2 := [...]int{1,2,3,4,5,6}
khai báo và khởi tạo một mảngarr2
với số phần tử được tự động phát hiện từ số lượng giá trị được cung cấp và kiểu dữ liệu làint
.
- Dòng
- Sử dụng hàm
len()
:- Dòng
fmt.Println(len(arr1))
in ra số phần tử của mảngarr1
sử dụng hàmlen()
. Trong trường hợp này, số phần tử là 4 vì mảngarr1
có 4 phần tử. - Dòng
fmt.Println(len(arr2))
in ra số phần tử của mảngarr2
sử dụng hàmlen()
. Trong trường hợp này, số phần tử là 6 vì mảngarr2
có 6 phần tử.
- Dòng
Kết quả.
4
6
Điều này thể hiện cách sử dụng hàm len()
để xác định số phần tử của mảng.
Hàm len()
trong Go được sử dụng để trả về số phần tử của một mảng, slice, hoặc map. Trong trường hợp của bạn, nó được sử dụng để xác định độ số phần tử dài của hai mảng arr1
và arr2
.
Lấy phần tử cuối cùng trong Arrays.
Để lấy phần tử cuối cùng của một mảng trong ngôn ngữ lập trình Go, bạn có thể sử dụng chỉ số cuối cùng của mảng và truy cập phần tử cuối cùng.
Dưới đây là một ví dụ:
package main
import "fmt"
func main() {
// Khai báo một mảng
numbers := [5]int{1, 2, 3, 4, 5}
// Lấy phần tử cuối cùng của mảng
lastElement := numbers[len(numbers)-1]
fmt.Println("Last element of the array:", lastElement)
}
Chúng ta sử dụng len
để lấy chiều dài của array, sau đó sử dụng chỉ số length-1
để truy cập phần tử cuối cùng của chúng. Lưu ý rằng trước khi truy cập phần tử cuối cùng, chúng ta cần kiểm tra xem array có phần tử nào không để tránh lỗi khi chiều dài là 0.