Trong Node.js, tôi có thể tạo một bản sao WordPress khá dễ dàng bằng cách sử dụng EventEmitter để nhân rộng và xây dựng một hệ thống móc vào lõi CMS, sau đó plugin có thể đính kèm.Sự kiện Golang: EventEmitter/dispatcher cho kiến trúc plugin
Bây giờ tôi cần mức độ mở rộng và phân tách lõi này cho CMS của tôi được viết và được chuyển đến Go. Về cơ bản tôi có cốt lõi đã hoàn thành bây giờ, nhưng để làm cho nó thật sự linh hoạt, tôi phải có khả năng chèn các sự kiện (móc) và để có các plugin gắn vào các móc này với các chức năng bổ sung.
Tôi không quan tâm về biên dịch lại (động/liên kết tĩnh), miễn là bạn không phải thay đổi cốt lõi để nạp plugin - cốt lõi CMS không bao giờ nên được sửa đổi. (Như WP, Drupal, vv)
tôi nhận thấy có một vài dự án chứ không phải không biết, cố gắng để triển khai sự kiện tại Gò nhìn hơi giống với EventEmitter trong Node.js:
https://github.com/CHH/eventemitter
https://github.com/chuckpreslar/emission
Vì 2 dự án trên không đạt được nhiều sự nổi tiếng và sự chú ý bằng cách nào đó, tôi cảm thấy cách suy nghĩ về các sự kiện này có thể là cách chúng ta nên làm trong Go? Điều này có nghĩa là Go có thể không hướng đến nhiệm vụ này? Để tạo các ứng dụng thực sự mở rộng thông qua các plugin? Không giống như Go có các sự kiện được tích hợp vào lõi của nó, và RPC dường như không phải là một giải pháp hợp lệ để tích hợp các plugin vào ứng dụng cốt lõi của bạn như chúng được xây dựng một cách nguyên bản, và như thể chúng là một phần của chính bản thân ứng dụng.
Cách tốt nhất để tích hợp plugin liền mạch vào ứng dụng cốt lõi của bạn, cho các điểm mở rộng không giới hạn (cốt lõi) mà không cần thao tác lõi mỗi khi bạn cần kết nối một plugin mới?
Xem cơ sở dữ liệu/sql và gói cơ sở dữ liệu/sql/trình điều khiển để biết ví dụ về kiến trúc plugin. Trong kiến trúc này, các trình cắm thêm [đăng ký] (http://godoc.org/database/sql#Register) từ các hàm init() và thực hiện các giao diện như được định nghĩa bởi gói trình điều khiển. –