Liên hệ với chúng tôi

Đề cương khóa học

1. Giới thiệu về Go

  • Go (Golang) là gì?
  • Lịch sử và triết lý thiết kế của Go
  • Go như một ngôn ngữ lập trình web và hệ thống
  • Các đặc tính chính:
    • Kiểu tĩnh (Static typing)
    • Đơn giản và dễ đọc
    • Biên dịch nhanh
    • Hỗ trợ song song (concurrency) tích hợp
    • Thu gom rác (Garbage collection)
    • Biên dịch đa nền tảng
  • Các trường hợp sử dụng phổ biến của Go
  • Lợi thế và hạn chế của Go
  • So sánh Go với C/C++, JavaScript, Ruby, Python và Java
  • Tầm nhìn về hệ sinh thái Go
  • Tổng quan về thư viện chuẩn Go
  • Go modules và quản lý phụ thuộc
  • Cấu trúc của một ứng dụng Go
  • Thực hành: Kiểm tra và chạy một chương trình Go đơn giản

2. Thiết lập môi trường phát triển Go

  • Cài đặt Go
  • Hiểu về bộ công cụ Go (Go toolchain)
  • Cấu hình các biến môi trường
  • Chọn IDE hoặc trình chỉnh sửa mã
  • Sử dụng dòng lệnh với Go
  • Tạo không gian làm việc Go
  • Hiểu cấu trúc dự án Go
  • Khởi tạo dự án với Go Modules
  • Sử dụng go mod init
  • Quản lý phụ thuộc bằng go get
  • Cập nhật và kiểm tra phụ thuộc
  • Định dạng mã nguồn bằng gofmt
  • Chạy chương trình bằng go run
  • Xây dựng ứng dụng bằng go build
  • Cài đặt ứng dụng Go
  • Biên dịch chéo ứng dụng
  • Thực hành: Tạo và cấu hình một dự án Go bên trong container

3. Biến, Hằng số và Kiểu dữ liệu trong Go

  • Khai báo biến
  • Kiểu hiển thị và kiểu suy luận
  • Khai báo biến ngắn gọn
  • Hằng số
  • Giá trị mặc định (Zero values)
  • Tác dụng (Scope) và vòng đời của biến
  • Các kiểu dữ liệu nguyên thủy:
    • Số nguyên (Integers)
    • Số thực (Floating-point numbers)
    • Số phức (Complex numbers)
    • Giá trị logic (Booleans)
    • Chuỗi (Strings)
  • Chuyển đổi kiểu dữ liệu
  • Xử lý Unicode và UTF-8
  • Runes và bytes
  • Gán nhiều biến cùng lúc
  • Hiểu về độ an toàn kiểu dữ liệu
  • Bài tập: Xây dựng một chương trình xử lý dữ liệu dòng lệnh nhỏ

4. Toán tử và Biểu thức

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử logic
  • Toán tử gán
  • Tăng và giảm (Increment and decrement)
  • Ưu tiên toán tử
  • Xử lý các phép tính số nguyên và số thực
  • Tránh các lỗi chuyển đổi kiểu dữ liệu phổ biến
  • Bài tập: Thực hiện các phép tính và logic kiểm tra hợp lệ

5. Ngày giờ và Định dạng

  • Sử dụng gói time 
  • Tạo và thao tác với ngày
  • Lấy thời gian hiện tại
  • Múi giờ và địa điểm
  • Phân tích ngày giờ
  • Định dạng ngày giờ
  • Tính toán khoảng thời gian
  • Xử lý Unix timestamps
  • Xử lý timeout
  • Bài tập: Thêm dấu thời gian và tính toán khoảng thời gian vào ứng dụng

6. Mảng, Slice, Map và Struct

Mảng (Arrays)

  • Khai báo mảng
  • Khởi tạo mảng
  • Lặp qua mảng
  • Mảng nhiều chiều

Slice

  • Hiểu về sự khác biệt giữa Slice và Mảng
  • Tạo Slice
  • Thêm phần tử (Appending elements)
  • Sao chép Slice
  • Chiều dài và dung lượng của Slice
  • Cắt Slice từ Slice
  • Những bẫy phổ biến khi sử dụng Slice

Map

  • Tạo Map
  • Thêm và xóa mục nhập
  • Kiểm tra sự tồn tại của key
  • Lặp qua Map
  • Map chứa dữ liệu phức tạp

Struct

  • Định nghĩa cấu trúc (structures)

  • Các trường (fields) trong Struct

  • Khởi tạo Struct

  • Struct lồng nhau (Nested structs)

  • Struct ẩn danh (Anonymous structs)

  • Phương thức của Struct (Struct methods)

  • Các tag JSON cho Struct

  • Thực hành: Mô hình hóa người dùng, sản phẩm và dữ liệu ứng dụng bằng cách sử dụng structs, slices và maps

7. Logic Điều kiện và Vòng lặp

  • Câu lệnh if 
  • else và else if
  • Khai báo biến trong điều kiện
  • Vòng lặp for 
  • Vòng lặp vô hạn
  • Điều kiện vòng lặp
  • break và continue
  • Lặp với range 
  • Vòng lặp lồng nhau
  • Câu lệnh switch 
  • Switch dựa trên biểu thức
  • Nhiều trường hợp (cases)
  • Trường hợp mặc định (default cases)
  • Switch kiểu dữ liệu (Type switches)
  • Bài tập: Thực hiện logic kiểm tra hợp lệ và xử lý cho ứng dụng

8. Hàm (Functions)

  • Định nghĩa hàm
  • Tham số của hàm
  • Giá trị trả về
  • Nhiều giá trị trả về
  • Giá trị trả về đặt tên
  • Hàm có tham số biến đổi (Variadic functions)
  • Hàm ẩn danh
  • Giá trị là hàm
  • Closures
  • Đệ quy (Recursion)
  • Truyền hàm như tham số
  • Hàm trả về lỗi
  • Thiết kế các hàm nhỏ, tái sử dụng được
  • Bài tập: Tái cấu trúc mã nguồn hiện tại thành các hàm tái sử dụng

9. Con trỏ và Khái niệm Bộ nhớ

  • Con trỏ là gì?
  • Toán tử lấy địa chỉ và giải tham chiếu (dereference)
  • Con trỏ và tham số hàm
  • Con trỏ nhận (Pointer receivers)
  • Con trỏ đến structs
  • Con trỏ Nil
  • Khi nào nên sử dụng con trỏ
  • Ngữ nghĩa giá trị và tham chiếu
  • Hiểu về quản lý bộ nhớ và thu gom rác của Go
  • Các lỗi con trỏ phổ biến
  • Thực hành: Sửa đổi dữ liệu ứng dụng bằng cách sử dụng con trỏ

10. Tạo ứng dụng Web bằng Go

  • Tổng quan về khả năng web của Go
  • Giới thiệu gói net/http 
  • Tạo máy chủ HTTP
  • Yêu cầu và phản hồi HTTP
  • Các phương thức HTTP
  • URL yêu cầu và tham số truy vấn
  • Header HTTP
  • Mã trạng thái HTTP
  • Cơ bản về định tuyến (Routing)
  • Tạo handlers
  • Xử lý dữ liệu form
  • Phục vụ các tệp tĩnh (static files)
  • Làm việc với các mẫu HTML (HTML templates)
  • Biến và cấu trúc điều khiển trong template
  • Tổ chức một ứng dụng web
  • Thực hành: Xây dựng một máy chủ web Go cơ bản

11. Xây dựng dịch vụ Web RESTful

  • Cơ bản về kiến trúc REST
  • Thiết kế các endpoint API
  • GET, POST, PUT, PATCH và DELETE
  • Làm việc với JSON
  • Mã hóa và giải mã JSON
  • Kiểm tra hợp lệ yêu cầu
  • Mã trạng thái HTTP
  • Phản hồi lỗi
  • Tham số truy vấn và tham số đường dẫn
  • Cấu trúc phản hồi API
  • Tách handlers khỏi logic kinh doanh
  • Thực hành: Xây dựng một REST API CRUD

12. Go Runtime, Biên dịch và Xây dựng Dự án

  • Hiểu về trình biên dịch Go
  • Quy trình build của Go
  • go run
  • go build
  • go install
  • go test
  • Các cờ build (Build flags)
  • Cấu hình theo môi trường
  • Xây dựng cho các hệ điều hành và kiến trúc khác nhau
  • Sản xuất các binary độc lập
  • Quản lý cấu hình ứng dụng
  • Bài tập: Biên dịch ứng dụng cho nhiều nền tảng

13. Làm việc với Tệp và Web

  • Mở và đóng tệp
  • Đọc tệp
  • Viết tệp
  • Tạo thư mục
  • Metadata của tệp
  • I/O có đệm (Buffered I/O)
  • Làm việc với luồng (streams)
  • Đọc và viết tệp JSON
  • HTTP clients
  • Thực hiện yêu cầu HTTP ra bên ngoài
  • Xử lý lỗi của HTTP client
  • Timeouts và hủy bỏ (cancellation)
  • Xử lý phản hồi API
  • Thực hành: Lấy dữ liệu từ một API bên ngoài và lưu trữ cục bộ

14. Xử lý Lỗi và Gỡ lỗi

  • Cách tiếp cận lỗi của Go
  • Trả về lỗi từ các hàm
  • Kiểm tra lỗi
  • Tạo lỗi tùy chỉnh (custom errors)
  • Bọc lỗi (Wrapping errors)
  • Thêm ngữ cảnh vào lỗi
  • errors.Is và errors.As
  • Panic và recovery
  • Khi nào nên sử dụng panic
  • Gỡ lỗi các vấn đề phổ biến của Go
  • Ghi log hoạt động của ứng dụng
  • Sử dụng các công cụ gỡ lỗi Go
  • Bài tập: Chẩn đoán và sửa các lỗi ứng dụng được cố tình tạo ra

15. Interfaces và Trừu tượng

  • Interface là gì?
  • Thực hiện interface ngầm định
  • Định nghĩa interfaces
  • Giá trị interface
  • Interfaces rỗng / any
  • Khẳng định kiểu (Type assertions)
  • Switch kiểu dữ liệu (Type switches)
  • Thực hiện qua con trỏ so với giá trị
  • Thiết kế các interface nhỏ
  • Đảo ngược phụ thuộc (Dependency inversion)
  • Sử dụng interfaces để test
  • Giảm độ kết hợp của ứng dụng
  • Thực hành: Giới thiệu interfaces vào ứng dụng web mẫu

16. Packages và Tổ chức Dự án

  • Tạo packages
  • Quy ước đặt tên package
  • Định danh xuất bản và không xuất bản (Exported and unexported identifiers)
  • Nhập packages (Importing packages)
  • Khởi tạo package
  • Tổ chức các lớp ứng dụng
  • Các package nội bộ (Internal packages)
  • Quản lý phụ thuộc bằng Go Modules
  • Định phiên ngữ nghĩa (Semantic versioning)
  • Sử dụng các package của bên thứ ba
  • Tránh phụ thuộc vòng tròn
  • Thiết kế dự án Go dễ bảo trì
  • Bài tập: Tái cấu trúc ứng dụng thành các package riêng biệt

17. Song song (Concurrency) với Goroutines

  • Song song là gì?
  • Goroutines
  • Bắt đầu goroutines
  • Hiểu về thực thi song song nhẹ (lightweight concurrent execution)
  • Các thách thức đồng bộ hóa
  • Trạng thái chia sẻ
  • Điều kiện tranh chấp (Race conditions)
  • Sử dụng sync.WaitGroup
  • Mutexes và mutex đọc/viết
  • Các thao tác nguyên tử (Atomic operations)
  • Thực hành: Chuyển đổi một tác vụ tuần tự thành xử lý song song

18. Kênh (Channels)

  • Hiểu về kênh (channels)
  • Gửi và nhận giá trị
  • Kênh có đệm so với kênh không đệm
  • Hành vi chặn (Blocking behavior)
  • Đóng kênh
  • Lặp qua kênh với range
  • Kênh định hướng (Directional channels)
  • Giao tiếp dựa trên kênh
  • Câu lệnh Select
  • Timeouts và hủy bỏ
  • Mô hình worker-pool
  • Mô hình Producer/consumer
  • Thực hành: Xây dựng một hệ thống worker song song

19. Context và Quản lý Yêu cầu

  • Tại sao context quan trọng trong ứng dụng web
  • context.Context
  • Context phạm vi yêu cầu (Request-scoped context)
  • Hủy bỏ (Cancellation)
  • Hạn chót (Deadlines)
  • Timeouts
  • Truyền context qua các lớp ứng dụng
  • Hủy bỏ các thao tác database hoặc HTTP
  • Tránh sử dụng sai context
  • Bài tập: Thêm tính năng hủy yêu cầu và timeouts vào ứng dụng web

20. Kiểm thử (Testing) ứng dụng Go

  • Tại sao kiểm thử tự động lại quan trọng
  • Viết unit tests
  • Gói testing 
  • Hàm test
  • Quy ước đặt tên test
  • Test dựa trên bảng (Table-driven tests)
  • Test lỗi
  • Test các HTTP handlers
  • Máy chủ test HTTP
  • Test fixtures
  • Phạm vi phủ test (Test coverage)
  • Benchmark
  • Test mẫu (Example tests)
  • Test interfaces với mocks hoặc fakes
  • Thực hành: Tạo một bộ test cho ứng dụng mẫu

21. Tối ưu Hiệu năng

  • Hiểu về hiệu năng ứng dụng Go
  • Xác định điểm nghẽn (bottlenecks)
  • Hiệu năng CPU so với bộ nhớ
  • Các cấu trúc dữ liệu hiệu quả
  • Giảm phân bổ không cần thiết
  • Chuỗi, bytes và buffers
  • Quản lý Goroutines
  • Tránh sự song song quá mức
  • Chiến lược caching
  • Các yếu tố về database và mạng
  • Profiling ứng dụng
  • Benchmark và test hiệu năng
  • Sử dụng các công cụ profiling của Go
  • Bài tập: Profiling và tối ưu hóa một ứng dụng kém hiệu năng cố tình tạo ra

22. Bảo mật và Thực hành Xây dựng Ứng dụng Web Bền vững

  • Kiểm tra hợp lệ đầu vào của người dùng
  • Xử lý an toàn các yêu cầu HTTP
  • Phòng chống các lỗ hổng web phổ biến
  • Xử lý lỗi an toàn
  • Khái niệm xác thực và phân quyền
  • Quản lý bí mật (secrets) và cấu hình
  • Giao tiếp HTTP an toàn
  • Tránh lưu thông tin nhạy cảm trong logs
  • Quản lý phụ thuộc và cập nhật
  • Hạn chế tài nguyên và timeout yêu cầu
  • Bài tập: Rà soát và tăng cường bảo mật cho API mẫu

23. Ghi Log và Khả năng Quan sát Ứng dụng

  • Cơ bản về ghi log
  • Ghi log có cấu trúc (Structured logging)
  • Cấp độ log
  • Ghi log yêu cầu
  • Ghi log lỗi
  • Tương quan và ID yêu cầu
  • Giám sát hành vi ứng dụng
  • Các chỉ số cơ bản (Basic metrics)
  • Các endpoint kiểm tra sức khỏe (Health-check endpoints)
  • Chẩn đoán các vấn đề sản xuất
  • Thực hành: Thêm ghi log có cấu trúc và kiểm tra sức khỏe

24. Container hóa ứng dụng Go

  • Tại sao nên sử dụng container?
  • Ứng dụng Go và container hóa
  • Viết Dockerfile
  • Xây dựng đa giai đoạn (Multi-stage builds)
  • Xây dựng image runtime tối thiểu
  • Quản lý cấu hình thông qua biến môi trường
  • Mạng container
  • Mở các cổng (ports) của ứng dụng
  • Chạy ứng dụng trong container
  • Test ứng dụng đã container hóa
  • Thực hành: Đóng gói ứng dụng Go mẫu thành một container sẵn sàng cho sản xuất

25. Triển khai (Deployment)

  • Chuẩn bị ứng dụng cho môi trường sản xuất
  • Xây dựng các binary sản xuất
  • Cấu hình môi trường
  • Triển khai dựa trên container
  • Kiến trúc triển khai
  • Reverse proxies
  • Các cân nhắc về HTTPS/TLS
  • Kiểm tra sức khỏe ứng dụng
  • Đóng êm dịu (Graceful shutdown)
  • Xử lý tín hiệu hệ điều hành
  • Mở rộng ứng dụng web Go
  • Mở rộng ngang so với mở rộng dọc
  • Gỡ lỗi cơ bản trong triển khai
  • Thực hành: Triển khai ứng dụng web mẫu

26. Dự án Tốt nghiệp (Capstone): Ứng dụng Web Go Hoàn chỉnh

Người tham gia kết hợp các khái niệm bằng cách phát triển một ứng dụng hoàn chỉnh.

Dự án có thể bao gồm:

  • Khởi tạo dự án với Go Modules
  • Tổ chức packages
  • Định tuyến HTTP
  • Các endpoint REST API
  • Xử lý yêu cầu và phản hồi JSON
  • Kiểm tra hợp lệ đầu vào
  • Xử lý lỗi
  • Interfaces
  • Xử lý song song
  • Giao tiếp với API bên ngoài
  • Lưu trữ tệp hoặc database
  • Test tự động
  • Ghi log
  • Cân nhắc về hiệu năng
  • Container hóa
  • Cấu hình sản xuất
  • Triển khai

27. Rà soát và Thực hành Tốt nhất

  • Rà soát cú pháp cốt lõi của Go
  • Quy ước viết mã Go
  • Viết Go theo đúng chuẩn (idiomatic Go)
  • Giữ cho mã nguồn đơn giản
  • Thiết kế package hiệu quả
  • Thực hành tốt nhất cho xử lý lỗi
  • Nguyên tắc thiết kế interface
  • Thực hành tốt nhất cho concurrency
  • Chiến lược test
  • Cân nhắc về hiệu năng
  • Khả năng bảo trì và dễ đọc
  • Các lỗi phổ biến do lập trình viên Go mới mắc phải
  • Các phương pháp tiếp cận được khuyến nghị để tiếp tục phát triển Go

28. Kết luận

  • Rà soát các khái niệm chính
  • Rà soát ứng dụng web đã hoàn thành
  • Câu hỏi và thảo luận
  • Gỡ lỗi các kịch bản thực tế phổ biến
  • Các bước tiếp theo được khuyến nghị cho phát triển Go
  • Các thư viện Go bổ sung và tài nguyên hệ sinh thái
  • Cơ hội bổ sung để xây dựng các dịch vụ Go chuẩn sản xuất

Yêu cầu

  • Hiểu biết về các nguyên tắc lập trình chung

Đối tượng tham gia

  • Trình phát triển (Developers)
 28 Giờ

Số người tham gia


Giá cho mỗi học viên

Đánh giá (5)

Các khóa học sắp tới

Các danh mục liên quan