Slice trong Golang là gì?

Slice trong Go là một cách linh hoạt và hiệu quả để biểu diễn mảng, và slice thường được sử dụng thay cho mảng vì kích thước động và các tính năng bổ sung của chúng. Dưới đây là những điều bạn cần biết về Slice trong Golang.

Slice trong Golang là gì

Một slice là tham chiếu đến một phần của mảng. Đây là cấu trúc dữ liệu mô tả một phần của mảng bằng cách chỉ định chỉ mục bắt đầu và độ dài của phần đó. Điều này cho phép bạn làm việc với một phần của mảng như thể đó là một mảng độc lập. Trong ngôn ngữ Go, slice mạnh hơn, linh hoạt hơn, tiện lợi hơn mảng và là cấu trúc dữ liệu nhẹ. Slice là một chuỗi có độ dài biến đổi, lưu trữ các phần tử có cùng kiểu, bạn không được phép lưu trữ các phần tử có kiểu khác nhau trong cùng một slice.

Nó giống như một mảng có giá trị chỉ mục và độ dài, nhưng kích thước của slice được thay đổi, chúng không có kích thước cố định giống như một mảng. Về nội bộ, slice và mảng được kết nối với nhau, một slice là tham chiếu đến một mảng cơ bản. Nó được phép lưu trữ các phần tử trùng lặp trong slice.

Vị trí chỉ mục đầu tiên trong một slice của Golang luôn là 0 và vị trí chỉ mục cuối cùng sẽ là (chiều dài của slice- 1).

Hãy cùng xem xét ví dụ dưới đây để hiểu cách tạo slice trong Golang

package main

import "fmt"

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

    fmt.Println("Array: ", array)
    fmt.Println("Slice: ", slice)
}

Kết quả:

Array: [1 2 3 4 5]
Slice: [2 3 4] 

Trong ví dụ này, mảng được tạo với 5 phần tử và slice được tạo bằng cách chỉ định chỉ mục bắt đầu là 1 và độ dài là 4. Slice hiện chứa các phần tử 2, 3 và 4 từ mảng ban đầu.

Các lát cắt là động, có nghĩa là kích thước của chúng có thể thay đổi k

Slice: [1 2 3 4 5 6] 

hi bạn thêm hoặc xóa phần tử. Go cung cấp một số hàm tích hợp cho phép bạn sửa đổi các slice, chẳng hạn như thêm, sao chép và xóa.

Ví dụ cách thêm phần tử vào một slice trong Golang:

package main

import "fmt"

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

    fmt.Println("Slice: ", slice)
}

Kết quả:

Slice: [1 2 3 4 5 6] 

Trong ví dụ này, hàm append được sử dụng để thêm các phần tử 4, 5, 6 vào slice slice. Kết quả là một slice mới chứa các phần tử 1, 2, 3, 4, 5, 6.

Slice trong Go là một cấu trúc dữ liệu mạnh mẽ và linh hoạt có thể được sử dụng để biểu diễn mảng. Chúng cung cấp một cách làm việc với mảng năng động và hiệu quả hơn và được sử dụng rộng rãi trong các chương trình Go.

Khai báo Slice

Một slice được khai báo giống như một mảng, nhưng nó không chứa kích thước của slice. Vì vậy, nó có thể tăng hoặc giảm tùy theo yêu cầu.

Cú pháp:

[]T
or 
[]T{}
or 
[]T{value1, value2, value3, ...value n}

Ở đây, T là kiểu phần tử. Ví dụ:

var my_slice[]int 

Các thành phần của Slice

Một slice chứa ba thành phần:

  • Con trỏ: Con trỏ được sử dụng để trỏ đến phần tử đầu tiên của mảng có thể truy cập thông qua slice. Ở đây, phần tử được trỏ không nhất thiết phải là phần tử đầu tiên của mảng.
  • Chiều dài: Chiều dài là tổng số phần tử có trong mảng.
  • Dung lượng: Dung lượng biểu thị kích thước tối đa mà nó có thể mở rộng.

Chúng ta hãy thảo luận về tất cả các thành phần này với sự trợ giúp của một ví dụ:

Ví dụ:

//Chương trình Golang minh họa
// hoạt động của các thành phần slice
package main

import "fmt"

func main() {

    // Tạo một mảng
    arr := [7]string{"This", "is", "the", "tutorial",
                         "of", "Go", "language"}

    // Hiện mảng
    fmt.Println("Array:", arr)

    // Tạo một slice
    myslice := arr[1:6]

    // Hiện slice
    fmt.Println("Slice:", myslice)

    // Hiện chiều dài của slice
    fmt.Printf("Length of the slice: %d", len(myslice))

    // Hiển thị dung lượng của slice
    fmt.Printf("\nCapacity of the slice: %d", cap(myslice))
}

Kết quả:

Array: [This is the tutorial of Go language]
Slice: [is the tutorial of Go]
Length of the slice: 5
Capacity of the slice: 6

Ở ví dụ trên, chúng ta tạo một slice từ mảng đã cho. Ở đây, con trỏ của slice trỏ đến chỉ mục 1 vì giới hạn dưới của slice được đặt thành một nên nó bắt đầu truy cập các phần tử từ chỉ mục 1. Độ dài của slice là 5, nghĩa là tổng số phần tử có trong slice là 5 và dung lượng của slice là 6 nghĩa là nó có thể lưu trữ tối đa 6 phần tử trong đó.

Làm thế nào để tạo và khởi tạo một Slice?

Trong ngôn ngữ Go, một slice có thể được tạo và khởi tạo bằng những cách sau:

Sử dụng slice literal: Bạn có thể tạo một slice bằng slice literal. Việc tạo slice literal cũng giống như một array literal, nhưng với một điểm khác biệt là bạn không được phép chỉ định kích thước của slice trong dấu ngoặc vuông []. Như được hiển thị trong ví dụ bên dưới, vế phải của biểu thức này là slice literal.

var my_slice_1 = []string{"Geeks", "for", "Geeks"}

Lưu ý: Luôn nhớ rằng khi bạn tạo một slice bằng chuỗi ký tự, trước tiên nó sẽ tạo một mảng và sau đó trả về một tham chiếu slice cho mảng đó.

Ví dụ:

// Chương trình Go minh họa cách
// tạo một slice bằng một slice
// literal
package main

import "fmt"

func main() {

    // Tạo một slice
    // bằng key var
    var my_slice_1 = []string{"Geeks", "for", "Geeks"}

    fmt.Println("My Slice 1:", my_slice_1)

    // Tạo một slice
    //bằng khai báo viết tắt
    my_slice_2 := []int{12, 45, 67, 56, 43, 34, 45}
    fmt.Println("My Slice 2:", my_slice_2)
}

Kết quả:

My Slice 1: [Geeks for Geeks]
My Slice 2: [12 45 67 56 43 34 45]

Dùng một mảng

Như chúng ta đã biết, slice là tham chiếu của mảng nên bạn có thể tạo một slice từ mảng đã cho. Để tạo một slice từ mảng đã cho, trước tiên bạn cần chỉ định giới hạn dưới và trên, nghĩa là slice có thể lấy các phần tử từ mảng bắt đầu từ giới hạn dưới đến giới hạn trên. Nó không bao gồm các phần tử ở trên từ giới hạn trên. Như thể hiện trong ví dụ bên dưới:

Cú pháp:

array_name[low:high]

Cú pháp này sẽ trả về một slice mới.

Lưu ý: Giá trị mặc định của giới hạn dưới là 0 và giá trị mặc định của giới hạn trên là tổng số phần tử có trong mảng đã cho.

Ví dụ:

// Chương trình Go minh họa cách
// tạo slice từ mảng
package main

import "fmt"

func main() {

    // Tạo một mảng
    arr := [4]string{"Geeks", "for", "Geeks", "GFG"}

    // Tạo slice từ mảng được cung cấp
    var my_slice_1 = arr[1:2]
    my_slice_2 := arr[0:]
    my_slice_3 := arr[:2]
    my_slice_4 := arr[:]

    // Hiện kết quả
    fmt.Println("My Array: ", arr)
    fmt.Println("My Slice 1: ", my_slice_1)
    fmt.Println("My Slice 2: ", my_slice_2)
    fmt.Println("My Slice 3: ", my_slice_3)
    fmt.Println("My Slice 4: ", my_slice_4)
}

Kết quả:

My Array:  [Geeks for Geeks GFG]
My Slice 1:  [for]
My Slice 2:  [Geeks for Geeks GFG]
My Slice 3:  [Geeks for]
My Slice 4:  [Geeks for Geeks GFG]
Thứ Sáu, 16/05/2025 09:58
51 👨 74
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng