golang

Lời giới thiệu

Tôi gọi nó là ăn xổi vì thực tế tôi không có code backend bao giờ. Và đây là lần đầu tiên tôi nghĩ rằng mình cần học backend để hiểu hơn về công việc của các dev bên backend. Với 1 lập trình viên frontend – cụ thể là iOS, việc làm việc thường xuyên với các APIs dạng restful là thường xuyên. Bạn sẽ dùng Alamofire, Moya… để request lên server, lấy data dạng JSON trả về, convert chúng sang object và xử lý business cho nó. Do vậy tôi cũng nắm được đôi chút phần nào về dạng của API: chúng ta sẽ có 1 đường link để gọi, các tham số cho header như:

Content-Type: application/json
Authorization: token..

Các params gửi lên, token để authenticate, các thông báo lỗi, response trả về, method của API như GET, POST, PUT, DELETE…

Bản chất nó như thế nào thì chắc hẳn là 1 dev front end sẽ không bao giờ hiểu được cách làm nếu không tự nhảy vào code. Vì tính tò mò, tôi đã giành 1 chút thời gian cho việc tìm hiểu các ngôn ngữ lập trình backend. Bạn sẽ có Nodejs, php, java, Golang, ruby, python… rất rất nhiều ngôn ngữ để làm. Tôi cũng hoang mang không biết nên chọn cái nào cho hợp lý, nên tôi bắt đầu tìm các bài so sánh giữa chúng. Cuối cùng tôi chọn Golang vì lý do server của nhiều công ty nổi tiếng đang dùng, như Google, facebook, Netflix… Và thứ 2 nó có con trỏ, 1 dạng na ná C++. Có người đã nói là ngôn ngữ C++ cho thế kỷ 21, tận dụng điểm mạnh của C++ và thay thế sự phức tạp của nó. Tuy nhiên khi bắt đầu học, tôi cảm giác hơi khó khăn chút xíu vì cú pháp khá na ná C/C++, mà lại giống Swift, … Nó có 1 số quy tắc mà mãi sau tôi mới biết như cách đặt tên hàm, … Nếu bạn tin tôi thì hãy đọc tiếp nhé, bạn sẽ thấy Golang là 1 ngôn ngữ rất tốt về hiệu năng và chặt chẽ về cú pháp.

Đầu tiên dự án của tôi bạn có thể xem tại đây:

https://github.com/lexuanquynh/go_api

Đây là 1 dự án backend trả về các APIs dạng Restful. Bạn sẽ bắt gặp nhiều thứ quen thuộc như đăng nhập, đăng ký, cập nhật thông tin, authenticate với token… Vui lòng đọc kỹ README để hiểu cách cài đặt và các yêu cầu bắt buộc để chạy được dự án này.

Kiến trúc dự án

Với 1 người như “trang giấy trắng” – liệu bạn sẽ hỏi tôi là “tôi chưa code Golang bao giờ, vậy tôi có thể học được nó 1 cách dễ dàng không?” Câu trả lời này sẽ là “Bạn sẽ học được nó nếu như bạn nắm được luồng của dự án”. Vậy kiến trúc dự án của tôi tuân theo chuẩn nào? Rất thân thuộc với backend – tôi sử dụng Clean architecture để làm dự án này. Nếu bạn cũng code iOS như tôi, bạn hãy xem kiến trúc Clean architecture cho iOS ở đây nhé:

https://github.com/sergdort/CleanArchitectureRxSwift

Nếu bạn đã nắm chắc về kiến trúc này thì thật đơn giản để bắt đầu đọc hiểu project Golang của tôi.

Kiến trúc Clean architecture

Bạn có thể dịch nó là kiến trúc sạch – hay đơn giản là không cần dịch – chỉ cần hiểu nó hoạt động thế nào thôi.

Bạn nhìn thấy 3 vòng tròn màu khác nhau, phía trong cùng màu cam là lớp Domain – lớp này sẽ chứa các use case của ứng dụng, và các Entities sử dụng trong ứng dụng. Vậy use case là gì:

  • Use case: là các hành động trong ứng dụng. Ví dụ hành động đăng nhập, đăng ký.. trong 1 ứng dụng được gọi là use case – và use case sẽ sử dụng các hàm ảo(interface hay protocol) mà bạn đã từng viết để mô tả. Nó chỉ có tên hàm chứ ruột không có. Và lớp nào kế thừa lại các use case này đều phải implement toàn bộ use case.
  • Entities: cụ thể là các model. Thường bạn sẽ định nghĩa dưới dạng giá trị(struct) thay vì class. Nó lưu thông tin dữ liệu, nên mới được viết dưới dạng struct.

Vòng tròn thứ 2 là màu xanh lá cây – lớp Platform. Nó implementation các use case của lớp Domain ở trên, và nhằm che dấu cách triển khai như thế nào. Nó có thể là gọi service, lưu dữ liệu vào database(sql, realm..).

Vòng tròn ngoài cùng có màu xanh biển – lớp Application. Application có nhiệm vụ kết nối người dùng với các use case của ứng dụng. Nó có thể được triển khai bất cứ mô hình kiến trúc nào như MVC, MVVM, MVP.

Vì thế, application sẽ giao tiếp bằng interface, mà không trực tiếp để ẩn logic của các use case này. Ta thấy rằng việc này làm cho ứng dụng trở nên sạch sẽ, dễ dàng thay đổi các UseCaseProvider implementation mà không cần thiết phải thay thế các UseCase interface.

Vậy là bạn đã nắm qua về kiến trúc của dự án. Trong bài tiếp theo, tôi sẽ hướng dẫn bạn cách “ăn xổi” với Golang – làm thế nào để học Golang nhanh chóng và ứng dụng được vào dự án này.

Code Toàn Bug

Code nhiều bug nhiều!

One thought on “#1 Lập trình Golang ăn xổi: Giới thiệu dự án

Leave a Reply

Your email address will not be published. Required fields are marked *