Làm Quen Với Lập Trình Go
Một khóa học giới thiệu thực hành, thân thiện với người mới về ngôn ngữ lập trình Go. Khóa học được cấu trúc thành các bài học nhỏ, dễ tiếp cận với chủ đề khám phá không gian, bao gồm lập trình mệnh lệnh, kiểu dữ liệu, hàm, phương thức, tập hợp, trạng thái và đồng thời hóa.
Bài học
Tổng quan khóa học
📚 Tóm tắt Nội dung
Một hướng dẫn thực hành thân thiện với người mới bắt đầu về ngôn ngữ lập trình Go. Khóa học được thiết kế thành các bài học nhỏ, dễ tiếp thu với chủ đề khám phá không gian, bao gồm lập trình mệnh lệnh, kiểu dữ liệu, hàm, phương thức, tập hợp dữ liệu, trạng thái và đồng thời hóa.
Khám phá niềm vui lập trình với Go thông qua những bài học nhỏ và bảy dự án tổng kết mang tính vũ trụ.
Tác giả: Nathan Youngman, Roger Peppé
Lời cảm ơn: Jennifer Stout, Marina Michaels, Matthew Merkes, Joel Kotarski, Aleksandar Dragosavljević, Renée French, Olga Shalakhina, Erick Zelaya, April Milne, Monica Kamsvaag.
🎯 Mục tiêu Học tập
- Định nghĩa ngôn ngữ lập trình Go và các trường hợp sử dụng chính của nó.
- Giải thích vai trò của trình biên dịch Go và lợi thế của nó so với các trình thông dịch.
- Điều hướng Go Playground để viết, biên dịch và chạy mã nguồn.
- Cấu trúc đúng mã Go bằng phong cách "một cặp dấu ngoặc duy nhất" bắt buộc để tránh lỗi cú pháp.
- Quản lý dữ liệu bằng nhiều kỹ thuật khai báo biến và toán tử gán số học.
- Tạo số ngẫu nhiên giả và triển khai logic điều kiện bằng nhánh và toán tử logic.
- Khai báo và định dạng biến dấu phẩy động bằng
float32vàfloat64với độ rộng và độ chính xác cụ thể. - Nhận diện và giảm thiểu lỗi do sai sót dấu phẩy động và hiện tượng tràn số nguyên.
- Sử dụng gói
bigvà hằng không có kiểu để xử lý các con số vượt quá giới hạn bit chuẩn. - Định nghĩa và gọi hàm bằng tham số, đối số và cú pháp tham số linh hoạt (variadic).
🔹 Bài học 1: Lên quỹ đạo
Tổng quan: Bài học này giới thiệu về Go – ngôn ngữ lập trình hiện đại dành cho điện toán đám mây. Học viên sẽ tìm hiểu sự khác biệt cơ bản giữa bản chất biên dịch của Go và các ngôn ngữ thông dịch, cách sử dụng Go Playground để thử nghiệm ngay lập tức, và cấu trúc cơ bản của một chương trình Go bao gồm gói và hàm main.
Kết quả học tập:
- Định nghĩa ngôn ngữ lập trình Go và các trường hợp sử dụng chính của nó.
- Giải thích vai trò của trình biên dịch Go và lợi thế của nó so với các trình thông dịch.
- Điều hướng Go Playground để viết, biên dịch và chạy mã nguồn.
🔹 Bài học 2: Logic Trung tâm Nhiệm vụ
Tổng quan: Bài học này giới thiệu các khối xây dựng cơ bản của lập trình Go, tập trung vào cách cấu trúc mã và kiểm soát việc thực thi. Học viên sẽ học phong cách "một cặp dấu ngoặc duy nhất", điểm vào chương trình, tiến tới các cách rút gọn khai báo biến và toán tử toán học, và kết thúc bằng logic ra quyết định sử dụng kiểu Boolean, so sánh và nhánh điều kiện.
Kết quả học tập:
- Cấu trúc đúng mã Go bằng phong cách "một cặp dấu ngoặc duy nhất" bắt buộc để tránh lỗi cú pháp.
- Quản lý dữ liệu bằng nhiều kỹ thuật khai báo biến và toán tử gán số học.
- Tạo số ngẫu nhiên giả và triển khai logic điều kiện bằng nhánh và toán tử logic.
🔹 Bài học 3: Vật lý Dữ liệu Không gian
Tổng quan: Bài học này khám phá cách Go xử lý dữ liệu số, từ độ chính xác phân số của số dấu phẩy động đến quy mô khổng lồ cần thiết cho khoảng cách thiên văn. Học viên sẽ học cách quản lý giới hạn bộ nhớ máy tính, bao gồm sai số dấu phẩy động và hiện tượng tràn số nguyên, đồng thời nắm vững chuyển đổi kiểu rõ ràng và sử dụng gói big để xử lý các kích thước số bất thường.
Kết quả học tập:
- Khai báo và định dạng biến dấu phẩy động bằng
float32vàfloat64với độ rộng và độ chính xác cụ thể. - Nhận diện và giảm thiểu lỗi do sai số dấu phẩy động và hiện tượng tràn số nguyên.
- Sử dụng gói
bigvà hằng không có kiểu để xử lý các con số vượt quá giới hạn bit chuẩn.
🔹 Bài học 4: Xây dựng Các Module Đơn vị
Tổng quan: Bài học này đề cập đến các khối xây dựng cơ bản của chương trình Go: hàm, kiểu tùy chỉnh và phương thức. Học viên sẽ học cách đóng gói logic để tái sử dụng, định nghĩa kiểu mới với hành vi cụ thể, và tận dụng hàm cấp cao – bao gồm các hàm bao (closures) và hàm vô danh – để tạo mã linh hoạt và module. Bài học kết thúc bằng một dự án tổng kết thực tế liên quan đến bảng chuyển đổi nhiệt độ.
Kết quả học tập:
- Định nghĩa và gọi hàm bằng tham số, đối số và cú pháp tham số linh hoạt (variadic).
- Phân biệt các chỉ mục được xuất và không được xuất bằng quy ước đặt tên của Go.
- Tạo kiểu tùy chỉnh và gắn hành vi vào chúng bằng phương thức và nhận diện (receivers).
🔹 Bài học 5: Chuyển hàng vào Khoang Chở
Tổng quan: Bài học này đề cập đến các cấu trúc dữ liệu thiết yếu trong Go để quản lý tập hợp thông tin. Nó đi từ mảng cố định và hành vi sao chép bộ nhớ của chúng đến các slice động – là cửa sổ linh hoạt vào dữ liệu – và cuối cùng là map để tra cứu khóa-giá trị hiệu quả. Đơn vị kết thúc bằng dự án tổng kết "Trò chơi Cuộc sống", minh họa cách dùng slice đa chiều để mô phỏng hệ thống phức tạp.
Kết quả học tập:
- Khai báo, khởi tạo và lặp qua mảng cố định và lưới đa chiều.
- Điều khiển slice bằng phạm vi chỉ số và tăng trưởng động nhờ hàm
append. - Quản lý hiệu suất bộ nhớ bằng cách phân biệt giữa độ dài và dung lượng, và khởi tạo trước tập hợp bằng
make.
🔹 Bài học 6: Thiết kế Nhà ở trên Hành tinh Ma
Tổng quan: Bài học này giới thiệu cách Go tổ chức dữ liệu và hành vi phức tạp. Học viên sẽ học cách nhóm các kiểu dữ liệu khác nhau vào các cấu trúc (struct), khởi tạo chúng bằng biểu thức hợp thành, và quản lý hành vi của chúng qua phương thức và hàm tạo. Bài học cũng khám phá triết lý thiết kế độc đáo của Go: ưu tiên ghép nối (composition) hơn kế thừa và sử dụng giao diện ngầm để đạt được tính đa hình.
Kết quả học tập:
- Định nghĩa, khởi tạo và sao chép cấu trúc để quản lý dữ liệu tọa độ và xe rover trên Mars phức tạp.
- Mã hóa cấu trúc Go thành định dạng JSON bằng thẻ struct để trao đổi dữ liệu tùy chỉnh.
- Triển khai phương thức, hàm tạo và nhúng cấu trúc để xây dựng mã tái sử dụng và có tổ chức.
🔹 Bài học 7: Đưa Gopher đi xuyên Hang
Tổng quan: Bài học này khám phá sức mạnh và an toàn của việc tham chiếu gián tiếp trong Go, tập trung vào cách con trỏ cho phép thay đổi dữ liệu hiệu quả và quản lý bộ nhớ. Nó cung cấp một nền tảng vững chắc cho lập trình phòng thủ bằng cách dạy học viên cách xử lý giá trị nil, quản lý tài nguyên với defer, và triển khai các mẫu xử lý lỗi chuẩn – kết thúc bằng áp dụng các quy tắc này vào một công cụ kiểm tra Sudoku.
Kết quả học tập:
- Sử dụng ký hiệu
&và*để quản lý địa chỉ bộ nhớ và giải tham chiếu giá trị. - Triển khai tham số và nhận diện kiểu con trỏ để cho phép thay đổi dữ liệu trong hàm và phương thức.
- Xử lý giá trị
niltrong slice, map và interface mà không gây lỗi chạy chương trình.
🔹 Bài học 8: Giao tiếp giữa Nhiều Rover
Tổng quan: Bài học này giới thiệu các nguyên tố đồng thời cơ bản trong Go: goroutine và kênh (channel). Nó khám phá cách chạy các tác vụ độc lập, giao tiếp an toàn giữa chúng, và quản lý trạng thái chung bằng Mutex để tránh xung đột. Bài học kết thúc bằng một dự án tổng kết mô phỏng các rover trên Mars di chuyển trên lưới và báo cáo phát hiện.
Kết quả học tập:
- Khởi động và quản lý các tác vụ đồng thời bằng từ khóa
go. - Thực hiện giao tiếp an toàn giữa các goroutine bằng kênh và câu lệnh
select. - Xây dựng luồng dữ liệu và quản lý vòng đời goroutine bằng cách đóng kênh.