Khóa học go

Arrays trong Go Lang

0 phút đọc

Trong Go, mảng (array) là một cấu trúc dữ liệu quan trọng cho phép lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu. Mảng có kích thước cố định và không thể thay đổi sau khi được khai báo. Mặc dù mảng không phổ biến như slice trong Go, nhưng chúng vẫn có vai trò quan trọng trong việc quản lý dữ liệu. Bài viết này sẽ cung cấp một cái nhìn tổng quan chi tiết về mảng trong Go, bao gồm cú pháp, cách sử dụng, và các ví dụ minh họa cụ thể.

Khái Niệm Mảng

Mảng là một tập hợp các phần tử có cùng kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ. Mỗi phần tử trong mảng có một chỉ số (index) bắt đầu từ 0. Mảng có kích thước cố định, nghĩa là số lượng phần tử trong mảng không thể thay đổi sau khi mảng được khai báo.

Cú Pháp Khai Báo Mảng

Có hai cách chính để khai báo mảng trong Go: sử dụng từ khóa var và sử dụng cú pháp khai báo ngắn gọn.

Sử Dụng Từ Khóa var

Cú pháp khai báo mảng sử dụng từ khóa var như sau:

var array_name [length]Type

Trong đó:

  • array_name là tên của mảng.
  • length là số lượng phần tử trong mảng.
  • Type là kiểu dữ liệu của các phần tử trong mảng.

Ví Dụ:

package main

import "fmt"

func main() {
    var arr [5]int
    fmt.Println(arr) // Output: [0 0 0 0 0]
}

Sử Dụng Cú Pháp Khai Báo Ngắn Gọn

Cú pháp khai báo mảng sử dụng cú pháp khai báo ngắn gọn như sau:

array_name := [length]Type{value1, value2, ..., valueN}

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr) // Output: [1 2 3 4 5]
}

Truy Cập và Thay Đổi Phần Tử trong Mảng

Bạn có thể truy cập và thay đổi các phần tử trong mảng bằng cách sử dụng chỉ số của chúng. Chỉ số của phần tử đầu tiên là 0 và chỉ số của phần tử cuối cùng là length-1.

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr[0]) // Output: 1
    fmt.Println(arr[4]) // Output: 5

    arr[2] = 10
    fmt.Println(arr) // Output: [1 2 10 4 5]
}

Khởi Tạo Mảng

Bạn có thể khởi tạo mảng với các giá trị mặc định hoặc không khởi tạo giá trị cho mảng. Nếu không khởi tạo giá trị, các phần tử trong mảng sẽ được gán giá trị mặc định của kiểu dữ liệu tương ứng.

Ví Dụ:

package main

import "fmt"

func main() {
    var arr1 [5]int
    arr2 := [5]int{1, 2, 3, 4, 5}
    arr3 := [...]int{6, 7, 8, 9, 10}

    fmt.Println(arr1) // Output: [0 0 0 0 0]
    fmt.Println(arr2) // Output: [1 2 3 4 5]
    fmt.Println(arr3) // Output: [6 7 8 9 10]
}

Mảng Một Chiều và Mảng Đa Chiều

Mảng trong Go có thể là mảng một chiều hoặc mảng đa chiều. Mảng đa chiều là mảng của các mảng.

Mảng Một Chiều

Mảng một chiều là mảng cơ bản với một dãy các phần tử.

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr) // Output: [1 2 3 4 5]
}

Mảng Đa Chiều

Mảng đa chiều là mảng của các mảng. Bạn có thể tạo mảng hai chiều, ba chiều, hoặc nhiều chiều hơn.

Ví Dụ:

package main

import "fmt"

func main() {
    var arr [2][3]int
    arr[0][0] = 1
    arr[0][1] = 2
    arr[0][2] = 3
    arr[1][0] = 4
    arr[1][1] = 5
    arr[1][2] = 6

    fmt.Println(arr) // Output: [[1 2 3] [4 5 6]]
}

Duyệt Qua Các Phần Tử trong Mảng

Bạn có thể sử dụng vòng lặp for để duyệt qua các phần tử trong mảng.

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    for i := 0; i < len(arr); i++ {
        fmt.Println(arr[i])
    }
}

Bạn cũng có thể sử dụng vòng lặp for range để duyệt qua các phần tử trong mảng.

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    for index, value := range arr {
        fmt.Printf("arr[%d] = %d\n", index, value)
    }
}

Mảng Là Kiểu Giá Trị

Mảng trong Go là kiểu giá trị, nghĩa là khi bạn gán một mảng cho một biến khác hoặc truyền mảng vào hàm, một bản sao của mảng sẽ được tạo ra. Điều này có nghĩa là thay đổi trên bản sao sẽ không ảnh hưởng đến mảng gốc.

Ví Dụ:

package main

import "fmt"

func main() {
    a := [3]int{1, 2, 3}
    b := a
    b[0] = 10

    fmt.Println("a:", a) // Output: a: [1 2 3]
    fmt.Println("b:", b) // Output: b: [10 2 3]
}

Truyền Mảng vào Hàm

Khi truyền mảng vào hàm, bạn có thể truyền mảng bằng giá trị hoặc bằng con trỏ.

Truyền Mảng Bằng Giá Trị

Ví Dụ:

package main

import "fmt"

func modifyArray(arr [3]int) {
    arr[0] = 10
}

func main() {
    a := [3]int{1, 2, 3}
    modifyArray(a)
    fmt.Println(a) // Output: [1 2 3]
}

Truyền Mảng Bằng Con Trỏ

Ví Dụ:

package main

import "fmt"

func modifyArray(arr *[3]int) {
    arr[0] = 10
}

func main() {
    a := [3]int{1, 2, 3}
    modifyArray(&a)
    fmt.Println(a) // Output: [10 2 3]
}

Mảng và Slice

Mặc dù mảng có vai trò quan trọng trong Go, nhưng slice thường được sử dụng nhiều hơn do tính linh hoạt của chúng. Slice là một lớp trừu tượng trên mảng, cho phép thay đổi kích thước động và cung cấp nhiều hàm tiện ích.

Ví Dụ:

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    slice := arr[1:4]

    fmt.Println(slice) // Output: [2 3 4]
}

Kết Luận

Mảng là một cấu trúc dữ liệu quan trọng trong Go, cho phép lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu. Mặc dù mảng có kích thước cố định và không thể thay đổi sau khi được khai báo, chúng vẫn có vai trò quan trọng trong việc quản lý dữ liệu. Bài viết này đã cung cấp một cái nhìn tổng quan chi tiết về mảng trong Go, bao gồm cú pháp, cách sử dụng, và các ví dụ minh họa cụ thể. Hiểu rõ về mảng sẽ giúp bạn viết mã Go hiệu quả và dễ bảo trì hơn.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

Gợi ý bài viết

Bình luận

Chưa có bình luận nào

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely