TopGit
Đánh giá repo GitHub

Go Patterns: bộ sưu tập Go design patterns và idiom

tmrts/go-patterns
GTopGit review image for tmrts/go-patterns
Review by Topgit.dev for tmrts/go-patterns, with GitHub repository stats and README context.
Nhận định nhanh

Go Patterns đáng để lưu lại như một bảng tra cứu, không phải một cuốn sách đọc từ đầu đến cuối. Bộ sưu tập này xếp các Go design patterns vào mười nhóm và đánh dấu từng pattern bằng dấu tick hoặc dấu X, để bạn biết trước khi bấm vào xem mình sẽ nhận được một đoạn code chạy được hay chỉ là một cái tên kèm mô tả một dòng. Cột trạng thái đó chính là giá trị cốt lõi của trang này.

Sao
★ 28.3k
Fork
⑂ 2.3k
Ngôn ngữ
Go
Giấy phép
Apache-2.0
Chủ đề
Backend
Cập nhật
May 2024
Trang chủ
GitHub

Go Patterns là bộ sưu tập gì?

Go Patterns là một repository trên GitHub (tmrts/go-patterns) tập hợp các design pattern và application pattern idiomatic cho Go, dưới dạng các file markdown liên kết với nhau. README nhóm các mục vào mười bảng — Creational, Structural, Behavioral, Synchronization, Concurrency, Messaging, Stability, Profiling, Idioms và Anti-Patterns — mỗi dòng gồm tên pattern, mô tả ngắn, và một dấu tick cho biết đã có code hay chưa.

Các design pattern trong Go được bộ sưu tập bao gồm

  • ✓Mười nhóm pattern — creational, structural, behavioral, synchronization, concurrency, messaging, stability, profiling, idioms và anti-patterns — mỗi nhóm là một mục riêng trong README kèm bảng liên kết.
  • ✓Một cột trạng thái (✔/✘) bên cạnh mỗi pattern, đánh dấu pattern nào đã có ví dụ code viết sẵn và pattern nào mới chỉ dừng ở tên gọi cùng mô tả một dòng.
  • ✓Các pattern dành riêng cho concurrency mà phần lớn sách pattern hướng OOP bỏ qua hoàn toàn: Fan-In/Fan-Out, Bounded Parallelism, Generators, và một mục Reactor để demultiplex các service request.
  • ✓Các stability pattern vay mượn từ thực hành hệ thống phân tán — Circuit-Breaker, Bulkheads, Deadline, Fail-Fast, Handshaking, Steady-State — áp dụng cho Go service thay vì các class pattern kiểu GoF thông thường.
  • ✓Một anti-pattern duy nhất được tài liệu hoá, Cascading Failures, mô tả cách lỗi ở một thành phần lan qua các phần liên kết với nhau trong hệ thống.
  • ✓Một trang idiom Functional Options — câu trả lời của Go cho việc constructor bị nạp quá nhiều tham số — được xếp riêng khỏi nhóm Creational, Structural và Behavioral kinh điển.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Khi nào nên áp dụng từng nhóm pattern

  • •Chọn Singleton, Builder, hay Factory Method khi cần một cách kiểm soát để khởi tạo một type — vài creational pattern ở đây đã có code chạy được.
  • •Chọn một primitive cho concurrency — Fan-Out/Fan-In cho worker pool, Bounded Parallelism để giới hạn số goroutine, Semaphore để giới hạn quyền truy cập vào một resource dùng chung.
  • •Thêm khả năng chịu lỗi cho một service boundary bằng Circuit-Breaker trước khi một dependency phía sau bắt đầu timeout dưới tải cao.
  • •Cấu trúc một API theo Functional Options thay vì một constructor với hàng chục tham số theo vị trí.
  • •Đọc các mục chưa implement (Bridge, Mediator, Visitor, và nhiều mục khác) như tài liệu tham khảo dù chưa có code, vì cột mô tả vẫn giải thích được ý tưởng.

Điểm mạnh

  • ✓Mỗi danh sách pattern là một bảng có thể bấm vào — nhóm, tên, mô tả một dòng, và trạng thái — nên quét qua toàn bộ taxonomy chỉ mất một màn hình thay vì một vòng tìm-rồi-bấm.
  • ✓Nhóm các pattern mà kỹ sư Go thực sự dùng lúc runtime — Semaphore, Circuit-Breaker, Fan-In/Fan-Out — dưới những heading mà một cuốn sách Gang of Four chưa bao giờ dùng, nằm cạnh bộ Creational/Structural/Behavioral kinh điển.
  • ✓Các mục đã implement dẫn thẳng tới một bài viết mang màu sắc Go, thay vì một ví dụ pseudocode chung chung.
  • ✓Cấp phép theo Apache-2.0, nên việc lấy phần giải thích của một pattern hay chỉnh sửa ví dụ code cho dự án riêng hoặc wiki nội bộ không phải là một câu hỏi về giấy phép.

Những gì bộ sưu tập không bao gồm

  • △Hơn một nửa số pattern trong catalog được đánh dấu ✘ — chỉ có tên, một mô tả một dòng, và một file markdown liên kết mà bên trong không có code Go nào.
  • △README không có changelog hay ngày tháng nào trong toàn bộ nguồn, nên không có cách nào biết một trang pattern cụ thể được cập nhật gần đây hay không.
  • △Các mục là những file markdown rời rạc theo từng pattern, không phải một mạch nội dung liền — không có chương nào so sánh các pattern với nhau hay giải thích khi nào nên chọn nhóm này thay vì nhóm kia.
  • △Mục Anti-Patterns chỉ có đúng một mục, Cascading Failures, nên đây không phải một catalog đầy đủ về những sai lầm thường gặp khi viết Go.

Các nguồn tài liệu Go design pattern khác

awesome-design-patterns — một danh sách được tuyển chọn rộng hơn về tài nguyên design pattern và thư viện trên nhiều ngôn ngữ, hữu ích nếu phần nội dung riêng cho Go trong Go Patterns chưa đủ. ↗Refactoring.Guru — giải thích từng pattern Gang of Four kèm sơ đồ và ví dụ code theo từng ngôn ngữ, một lựa chọn nặng hơn khi bạn muốn phần lý thuyết được trình bày đầy đủ thay vì một bảng chỉ dành riêng cho Go.Chính standard library của Go — đọc cách sync.Once, context, hay io.Reader được implement cũng dạy được các pattern idiomatic của Go mà không cần một danh sách được tuyển chọn nào.

Câu hỏi thường gặp

Bộ sưu tập Go Patterns bao gồm bao nhiêu design pattern?

Go Patterns tổng hợp 48 mục pattern và idiom, chia vào mười nhóm: Creational, Structural, Behavioral, Synchronization, Concurrency, Messaging, Stability, Profiling, Idioms và Anti-Patterns. Mỗi nhóm có một bảng riêng trong README, mỗi dòng liên kết tới một trang markdown ngắn cho pattern đó.

Có bao nhiêu pattern được implement đầy đủ so với chỉ là stub?

Trong 48 mục của Go Patterns, 18 mục được đánh dấu tick cho thấy đã có ví dụ code Go viết sẵn. 30 mục còn lại chỉ liệt kê tên và một mô tả một dòng trong bảng, trang markdown liên kết chưa có code mẫu nào.

Go Patterns bao gồm những nhóm pattern nào?

Go Patterns chia toàn bộ catalog thành mười nhóm: Creational, Structural, Behavioral, Synchronization, Concurrency, Messaging, Stability, Profiling, Idioms và Anti-Patterns. Mỗi nhóm xuất hiện như một bảng riêng trong README, liệt kê tên pattern, mô tả một dòng, và việc đã có ví dụ code Go hay chưa.

Go Patterns có còn được duy trì tích cực không?

README của Go Patterns không công bố changelog hay ngày commit cho từng pattern, nên không thể xác nhận mức độ cập nhật gần đây từ chính tài liệu của bộ sưu tập. Điều ổn định là cấu trúc nhóm và danh sách pattern, vốn đóng vai trò một tài liệu tham khảo bất kể nhịp độ cập nhật.

Sự khác nhau giữa concurrency pattern và synchronization pattern là gì?

Trong Go Patterns, các Synchronization pattern — Mutex, Semaphore, Read-Write Lock, Condition Variable — kiểm soát quyền truy cập độc quyền hoặc chia sẻ vào một resource duy nhất. Các Concurrency pattern — Bounded Parallelism, Generators, Parallelism, Producer Consumer — tổ chức cách các task độc lập được chia nhỏ và chạy, chứ không phải cách chúng chia sẻ resource.

Anti-pattern có được tài liệu hoá trong bộ sưu tập không?

Go Patterns tài liệu hoá đúng một anti-pattern: Cascading Failures, xếp trong nhóm Anti-Patterns riêng. README mô tả đây là lỗi trong một hệ thống gồm nhiều phần liên kết với nhau, khi một thành phần lỗi kéo theo hiệu ứng domino lan ra toàn hệ thống.

Nên dùng cho ai — và ai nên bỏ qua

Dùng cái này nếu bạn đã viết Go và cần một cái tên cùng một định nghĩa ngắn cho thứ sắp xây dựng — một worker pool, một circuit breaker, một constructor kiểu functional options — cộng thêm một ví dụ liên kết khi có sẵn. Bỏ qua nếu bạn mới học Go: bộ sưu tập này giả định bạn đã đọc hiểu goroutine, channel và interface một cách thoải mái, và nó sẽ không dạy bạn ngôn ngữ từ đầu. Cũng nên bỏ qua nếu bạn muốn một mạch nội dung duy nhất lập luận vì sao nên chọn pattern này thay vì pattern kia — đây là một bảng tra cứu, không phải một cuốn giáo trình thiết kế.

Repo liên quan

Nguồn & ghi công

Thông tin và danh sách pattern được lấy từ README của repository tmrts/go-patterns trên GitHub (https://github.com/tmrts/go-patterns).

Dữ liệu GitHub · đồng bộ lần cuối 15 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Muốn nghe thêm một ý kiến về go-patterns?

Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về go-patterns.

GitHub