Menu
CoddyTech
Lộ trình học

Cấu trúc dữ liệu và thuật toán với Go

Go cho bạn slice và map, phần còn lại bạn tự lo: không có kiểu stack, hàng đợi hay tập hợp, và heap trong container/heap chẳng làm gì cho đến khi bạn cài đặt heap.Interface. Lộ trình này cho bạn tự xây mọi cấu trúc bằng Go với struct và con trỏ, rồi dùng chúng để sắp xếp, đệ quy và duyệt đồ thị, và kết thúc bằng các bài phỏng vấn được chấm điểm. Miễn phí, ngay trên trình duyệt, kèm chứng nhận ở hầu hết khóa học.

377 bài học284 thử thách702 câu hỏi trắc nghiệm

DSA với Go, từng bước một

38 khóa học377 bài học284 thử thách702 câu hỏi trắc nghiệm

Mỗi bước là một nhóm khóa học có sẵn trên Coddy, và mọi nút "Bắt đầu" đều mở chúng bằng Go. Ba khóa học chưa được dạy bằng Go được liệt kê sau các bước.

  1. 1
    Bắt đầu bước nàyBắt đầuStack, hàng đợi, cây nhị phân, bảng băm và danh sách liên kết, mỗi cấu trúc được xây từ đầu bằng Go rồi dùng để giải bài. Học xong, dùng slice làm stack và map làm tập hợp là những lựa chọn bạn bảo vệ được, và kiểu hàng đợi mà Go không có là thứ bạn đã tự viết.Bắt đầu
  2. 2
    Bắt đầu bước nàyBắt đầuDanh sách liên kết đôi, heap và hàng đợi ưu tiên, trie, đồ thị và cây AVL tự cân bằng. container/list là cấu trúc đầu tiên trong số đó, có sẵn; sau bước này, năm phương thức của heap.Interface trở nên dễ hiểu vì bạn đã tự xây một heap, và cây cân bằng mà Go chưa bao giờ cung cấp là thứ bạn xây được.Bắt đầu
  3. 3
    Bắt đầu bước nàyBắt đầuBubble sort, selection sort, insertion sort, merge sort, quick sort, heap sort, counting sort và radix sort, viết bằng Go và xem trong công cụ trực quan hóa. sort.Slice dùng pattern-defeating quicksort từ Go 1.19, slices.Sort cũng vậy, và cả hai đều không ổn định, đó là lý do sort.SliceStable tồn tại; sau bước này, bạn hiểu từng từ trong câu đó nghĩa là gì.Bắt đầu
  4. 4
    Bắt đầu bước nàyBắt đầuThử thách đệ quy bằng Go, nơi stack của goroutine bắt đầu nhỏ và lớn dần khi cần, nên đệ quy sâu hàng nghìn lời gọi hiếm khi tràn. Thiếu trường hợp cơ sở thì vẫn chạm trần, mặc định 1 GB stack trên hệ thống 64 bit, và kết thúc bằng lỗi fatal chứ không phải một chương trình chạy chậm. Quy hoạch động và thao tác bit được liệt kê sau các bước, vì chúng được dạy bằng Python và C++.Bắt đầuTrang riêng
  5. 5
    Bắt đầu bước nàyBắt đầuTìm kiếm theo chiều rộng và theo chiều sâu, Dijkstra, Bellman-Ford, sắp xếp tô pô, Kruskal và Prim bằng Go, trên đồ thị bạn đã xây ở bước hai. Hàng đợi ưu tiên của Dijkstra trong Go là container/heap trên một slice thuộc kiểu của riêng bạn: chính heap từ bước hai, nằm sau một interface.Bắt đầu
  6. 6
Bạn nhận được gì
Mọi thứ bạn sẽ dùng để học lập trình

Học qua thực hành

Viết code thật, truy vấn cơ sở dữ liệu, xây dựng trang web và làm chủ prompt AI. Các bài học tương tác bao quát mọi kỹ năng mà lập trình viên hiện đại cần.

playground.js
Trình chỉnh sửa code
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Đầu vào
"Alex"
Đầu ra
"Hello, Coddy! Alex"

Xây dựng streak

Học đều đặn và nhìn tiến độ của bạn lớn dần! Theo dõi thói quen code mỗi ngày, bảo vệ streak bằng ngày đóng băng và nhận phần thưởng khi học mỗi ngày.

12 ngày streak

Quay lại ngày mai để giữ streak!

fire Filled icon
left icon

January 2026

right icon

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

21

22

23

24

25

26

27

28

29

30

product Double Or Nothing icon

Gấp đôi hoặc mất hết

Ngày 5/7

fire Freeze icon

Đóng băng streak

2 left

Code ở mọi nơi

Mang hành trình lập trình theo bên mình! Không cài đặt, không tải về: chỉ cần mở ra và bắt đầu code. Có trên iOS, Android và Web với đánh giá 4,9 sao.

Python
7Streak
250Điểm
5Năng lượng
Biến
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
Tiếp tục
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Hành trình
Mục tiêu
Bảng xếp hạng
Hồ sơ
4.9
Ngôi saoNgôi saoNgôi saoNgôi saoNgôi sao
Đánh giá

Bạn không đơn độc

Thi đấu trên bảng xếp hạng toàn cầu, mời bạn bè để nhận phần thưởng và cùng nhau ăn mừng thành công. Học code cùng bạn bè vui hơn nhiều!

Giải đấu Challenger
Giải đấu ChallengerTop 7 được thăng hạng
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconVùng thăng hạngleaderboard Arrow Up icon

Mọi cách để học

Đọc, nghe, tự kiểm tra, hỏi AI hoặc tra cứu bất cứ điều gì bạn đã học. Mỗi bài học phù hợp với trình độ của bạn.

Giới thiệu về biến
Âm thanh

Biến là một vùng chứa có tên, lưu một giá trị mà bạn có thể dùng lại sau trong chương trình.

Trong Python, bạn tạo biến bằng cách viết tên, dấu bằng, rồi giá trị muốn lưu.

Giá trị có thể thay đổi theo thời gian. Gán lại tên đó chỉ đơn giản là trỏ nó tới một giá trị mới.

1xSarah

Nhận chứng nhận

Nhận chứng nhận cho mỗi khóa học bạn hoàn thành. Thêm vào hồ sơ LinkedIn và CV để cho nhà tuyển dụng thấy kỹ năng lập trình của bạn.

CoddyGiấy chứng nhận hoàn thành
Chứng nhận rằngNguyễn Văn Anđã hoàn thành xuất sắc
python iconPython cơ bản
Đã xác minh
NgàyTh1 2026
LinkedInThêm vào LinkedIn

Vì sao nên học DSA với Go trên Coddy

  • Những cấu trúc Go để bạn tự viết. Go tích hợp sẵn slice và map rồi dừng ở đó: stack là một slice bạn append vào và cắt lại, tập hợp là map[T]struct{}, còn kiểu hàng đợi hay cây thì hoàn toàn không có. Biết cách viết những cấu trúc còn thiếu, và biết mỗi thao tác trên slice tốn bao nhiêu, là một phần của việc biết Go.
  • Struct và con trỏ, không che giấu gì. Go không có lớp: một nút là một struct có con trỏ trỏ tới nút tiếp theo, và phương thức gắn vào kiểu. Danh sách liên kết hay cây trông đúng như bản chất của nó, generic (từ Go 1.18) giúp tái sử dụng cho mọi kiểu phần tử, và bộ thu gom rác nghĩa là không có malloc hay free nào phải quản lý.
  • Gần như cả lộ trình bằng Go. Mọi cấu trúc dữ liệu, thuật toán sắp xếp, thuật toán đồ thị, thử thách đệ quy và gói phỏng vấn đều được dạy bằng Go. Ba khóa được dạy bằng ngôn ngữ khác và được liệt kê sau các bước, kèm đường dẫn đến từng khóa: quy hoạch động và chuỗi phỏng vấn Python bằng Python, thao tác bit bằng C++. Thao tác bit đọc rất tự nhiên từ góc nhìn Go, vốn có &, |, ^, << và >> như C++ và viết phép NOT là ^x.
  • Chấm điểm như một buổi phỏng vấn. Bài học nào cũng kết thúc bằng một thử thách Go được kiểm tra bằng test case, và khi một test case không qua, Bugsy đọc code của bạn và gợi hướng sửa mà không đưa luôn đáp án. Chứng nhận miễn phí ở hầu hết khóa học, mỗi chứng nhận đều xác minh được tại URL riêng.

Câu hỏi thường gặp về DSA với Go

Go có phù hợp để học cấu trúc dữ liệu và thuật toán không?

Có. Go biên dịch ra mã máy chạy nhanh, cú pháp đủ gọn để phần lớn thứ bạn đọc là thuật toán, và generic (từ Go 1.18) giúp một stack hay heap có kiểu tái sử dụng được. Đổi lại là thư viện chuẩn khá tinh gọn: ngoài slice, map, container/list và container/heap, bạn tự viết các cấu trúc, mà trên một lộ trình học thì đó chính là mục đích. Go cũng đang chạy phần lớn hạ tầng đám mây ngày nay, kể cả Docker và Kubernetes, nên nó là ngôn ngữ phỏng vấn tự nhiên cho các vị trí backend.

Kiểu và package nào của Go tương ứng với cấu trúc dữ liệu nào?

Slice là mảng động, và với append cùng thao tác cắt lại, nó cũng là stack của bạn; map là bảng băm, và map[T]struct{} là cách viết tập hợp chuẩn mực; container/list là danh sách liên kết đôi; còn container/heap vận hành một binary heap trên bất kỳ kiểu nào cài đặt heap.Interface. Không có kiểu hàng đợi, cây, trie hay đồ thị, nên bạn tự xây chúng ở bước một và bước hai.

container/heap trong Go hoạt động như thế nào?

Bạn cài đặt heap.Interface trên một kiểu slice của riêng mình: Len, Less và Swap từ sort.Interface, cộng thêm Push và Pop, vốn chỉ thêm vào và lấy ra ở cuối slice. Sau đó bạn gọi các hàm của package là heap.Push và heap.Pop, không bao giờ gọi phương thức của chính mình, và chúng lo việc đẩy lên, đẩy xuống để giữ đúng thứ tự. Cách này trông khá lạ cho đến khi bạn tự viết một heap, việc bước hai sẽ giao cho bạn.

Vì sao duyệt một map trong Go mỗi lần lại ra một thứ tự khác?

Vì Go cố ý xáo ngẫu nhiên thứ tự duyệt map, để không chương trình nào phụ thuộc vào nó. Bảng băm vốn không có thứ tự có ý nghĩa trong bất kỳ ngôn ngữ nào; Go chỉ đảm bảo bạn nhận ra điều đó. Khi thứ tự quan trọng, chẳng hạn đầu ra mà test so sánh, hãy gom các khóa vào một slice rồi sắp xếp, hoặc giữ một slice song song với map.

Khóa học nào trong lộ trình không được dạy bằng Go?

Ba khóa: quy hoạch động và chuỗi phỏng vấn Python, dạy bằng Python, và thao tác bit, dạy bằng C++. Chúng được liệt kê sau các bước, mỗi khóa có đường dẫn mở bằng chính ngôn ngữ của nó. Bảng ghi nhớ trong Go là một slice hoặc một map, và Go có thêm một toán tử bit mà C++ không có: &^, AND NOT, xóa ở toán hạng bên trái mọi bit được bật ở toán hạng bên phải.

Có cần biết Go trước khi bắt đầu lộ trình này không?

Ít nhất là struct, con trỏ, slice, map và phương thức; generic thì có ích, và bạn có thể học dần trên đường đi. Nếu những thứ đó còn mới với bạn, khóa học Go của Coddy sẽ đưa bạn đến đó trước, miễn phí, và lộ trình này tiếp nối từ chỗ khóa học đó kết thúc.

Tôi có nhận được chứng nhận cho lộ trình Cấu trúc dữ liệu & thuật toán không?

Có. Hoàn thành mọi bước và bạn nhận một chứng nhận miễn phí cho cả lộ trình Cấu trúc dữ liệu & thuật toán. Chứng nhận liệt kê từng khóa học bạn đã hoàn thành trên đường đi và liên kết đến chứng nhận riêng của từng khóa, để ai cũng có thể kiểm tra mọi kỹ năng được nêu. Bạn có thể thêm nó vào hồ sơ LinkedIn. Đây là chứng nhận hoàn thành của Coddy, không phải văn bằng được kiểm định.

Các lộ trình học khác

Cùng các khóa học, sắp xếp cho một vai trò khác. Tiến độ được giữ lại: khóa học đã hoàn thành ở một lộ trình được tính ở mọi lộ trình có khóa học đó.

Tất cả lộ trình học
Hình minh họa các ngôn ngữ lập trình của Coddy

Bắt đầu lộ trình Cấu trúc dữ liệu & thuật toán miễn phí

Bắt đầu học