Chương 1: CƠ SỞ LÝ THUYẾT 1. Tổng quan giới thiệu về Golang 1. Giới thiệu về Golang Hình 1.1 Giới thiệu về ngôn ngữ Golang Golang (Go Language) là một ngôn ngữ lập trình được sáng tạo và thiết kế bởi các nhân viên của Google. Tuy nhiên, Golang tồn tại như một dự án mã nguồn mở chứ không thuộc về quyền sở hữu của Google.
Golang được xây dựng để việc lập trình trở nên dễ đọc, đơn giản, hiệu quả và đạt được hiệu suất cao. - Golang còn được biết đến như là một ngôn ngữ static typed. Điều này có nghĩa là mọi thứ thuộc về Golang đều phải có kiểu dữ liệu và nó trái ngược với các ngôn ngữ dynamic typed như Python hoặc Javascript. - Golang tương tự như Java hay C++ bởi nó cũng là một ngôn ngữ được sử dụng cho mục đích lập trình.
Tuy nhiên, tính đơn giản chính là điểm khiến cho Golang trở nên khác biệt so với các ngôn ngữ lập trình khác. Nó sở hữu những cú pháp khá tinh gọn và có mức độ tương đồng rất lớn với C++. Do đó, việc học Golang không còn là điều khó khăn nếu bạn đã quá quen thuộc với C++. - Golang cũng có nhiều điểm chung với Java đặc biệt là khả năng xây dựng và phát triển các ứng dụng cross-platform.
Điều này giúp các lập trình viên sử dụng Golang dễ dàng hòa nhập được vào cộng đồng lập trình cho dù nó là ngôn ngữ "sinh sau đẻ muộn". - Golang đến từ tên miền của website chính thức là Golang.org, giúp việc tìm kiếm thông tin về ngôn ngữ lập trình Golang trở nên đơn giản hơn. SVTH: Lê Bá Nhật GVHD: ThS.Trần Bửu Dung 4 Xây dựng website quản lý đặt phòng khách sạn Vinpearl 1. Ưu điểm - Hiệu suất cao: + Golang được tối ưu hóa cho hiệu suất, với thời gian biên dịch nhanh và mã máy hiệu quả.
+ Có garbage collector hiệu quả, giúp quản lý bộ nhớ một cách hiệu quả mà không làm ảnh hưởng đến hiệu suất. - Đa nhiệm nhẹ: + Hỗ trợ đa nhiệm nhẹ (goroutines) giúp xử lý hàng nghìn goroutines mà không làm suy giảm hiệu suất. - Xử lý đồng thời (Concurrency): + Cung cấp các cơ chế xử lý đồng thời thông qua goroutines và channels, giúp dễ dàng thực hiện các tác vụ đa nhiệm và xử lý sự kiện. - Tính đơn giản và dễ đọc: + Cú pháp đơn giản và có cấu trúc rõ ràng giúp làm cho mã nguồn dễ đọc và bảo trì.
- Kiểm soát rõ ràng về gói và phạm vi: + Quản lý các phạm vi thông qua cách sử dụng gói (package) giúp kiểm soát mã nguồn và đảm bảo tính sắp xếp. - Hỗ trợ tự động đa kênh (Garbage Collection) + Golang có garbage collector tích hợp giúp tự động quản lý bộ nhớ, giảm gánh nặng cho người lập trình. Nhược điểm - Không hỗ trợ Generics (đa hình tham số): + Mặc dù đã có các cải tiến trong các phiên bản mới, nhưng Golang vẫn chưa hỗ trợ đầy đủ tính năng Generics, điều này có thể làm tăng độ phức tạp của mã nguồn trong một số trường hợp. - Thiếu mô hình kế thừa truyền thống: + Golang không hỗ trợ mô hình kế thừa truyền thống của các ngôn ngữ như Java hoặc C++.
Thay vào đó, nó sử dụng các interfaces để đạt được mục tiêu tương tự. - Cộng đồng chưa lớn như một số ngôn ngữ khác: + So với một số ngôn ngữ khác như Java hoặc Python, cộng đồng Golang có vẻ nhỏ hơn, điều này có thể làm giảm sức mạnh của việc chia sẻ và tái sử dụng mã nguồn. - Thư viện của Golang không phong phú bằng một số ngôn ngữ khác: SVTH: Lê Bá Nhật GVHD: ThS.Trần Bửu Dung 5 Xây dựng website quản lý đặt phòng khách sạn Vinpearl + Mặc dù càng ngày càng có nhiều thư viện được phát triển, nhưng so với một số ngôn ngữ khác, thư viện của Golang có thể chưa phong phú 1. Tổng quan giới thiệu về React 1.
Giới thiệu về React Hình 1.2 Giới thiệu về React JS - React (còn được gọi là Reactjs hay React.js) là một Thư viện javascript được tạo ra bởi sự cộng tác giữa Facebook và Instagram. Nó cho phép những nhà phát triển web tạo ra giao diện người dùng nhanh chóng. Phần Views của Reactjs thường được hiển thị bằng việc chủ yếu dung các component mà chứa các component cụ thể hoặc các thẻ HTML. Một trong những đặc trưng duy nhất của Reactjs là việc render dữ liệu không những có thể thực hiện ở tầng server mà còn ở tầng client.
- Nó cũng sử dụng khái niệm là Virtual DOM (DOM ảo). Virtual DOM tạo ra bản cache cấu trúc dữ liệu của ứng dụng trên bộ nhớ. Sau đó, ở mỗi vòng lặp, nó liệt kê những thay đổi và sau đó là cập nhật lại sự thay đổi trên DOM của trình duyệt một cách hiệu quả. Điều này cho phép ta viết các đoạn code như thể toàn bộ trang được render lại dù thực tế là Reactjs chỉ render những component hay subcomponent nào thực sự thay đổi.
Ưu điểm - Hiệu suất cao: + ReactJS sử dụng Virtual DOM để tối ưu hóa hiệu suất bằng cách cập nhật chỉ những phần cần thiết của DOM thực sự. + Component-Based: + Phát triển dựa trên kiến trúc component, giúp quản lý mã nguồn dễ dàng, tái sử dụng linh hoạt và phát triển mô-đun. - JSX - Cú pháp gần với HTML: + JSX giúp việc viết mã nguồn trở nên dễ đọc và dễ hiểu hơn, đồng thời giúp kiểm soát tốt hơn với HTML. - Thư viện mạnh mẽ: SVTH: Lê Bá Nhật GVHD: ThS.Trần Bửu Dung 6 Xây dựng website quản lý đặt phòng khách sạn Vinpearl + React có một cộng đồng lớn và phát triển nhanh chóng, điều này dẫn đến sự xuất hiện của nhiều thư viện hỗ trợ và công cụ phát triển (ví dụ như Redux, React Router).
- Hỗ trợ cộng đồng lớn: + Được sử dụng rộng rãi và có cộng đồng đông đảo, giúp giải quyết vấn đề nhanh chóng và có nhiều tài nguyên học tập. - React Native: + Cho phép phát triển ứng dụng di động sử dụng React Native, chia sẻ mã nguồn giữa ứng dụng web và ứng dụng di động. Nhược điểm - Học khái niệm mới: + Cho những người mới học, có thể cần một thời gian để làm quen với khái niệm component và JSX. - Chỉ giải quyết phần giao diện người dùng: + React giải quyết chỉ một phần của vấn đề, chủ yếu tập trung vào giao diện người dùng, vì vậy bạn cần sử dụng thêm thư viện hoặc framework khác để xử lý các phần khác của ứng dụng như routing hoặc quản lý trạng thái toàn cục.
- Có quá nhiều lựa chọn: + Với nhiều thư viện và công cụ khác nhau, có thể làm cho việc lựa chọn trở nên khó khăn và tốn thời gian. - Tích hợp lược đồ phức tạp: + Trong một số trường hợp, việc tích hợp React vào dự án hiện tại có thể đòi hỏi công sức nhiều hơn so với việc sử dụng một framework đầy đủ tính năng. - Nhược điểm của JSX: + Mặc dù JSX mang lại nhiều lợi ích, nhưng cũng có thể làm tăng độ phức tạp của mã nguồn và có thể khó đọc đối với những người mới học. Tổng quan giới thiệu PostgreSQL 1.
Giới thiệu về PostgreSQL Hình 1.3 Giới thiệu về PostgreSQL SVTH: Lê Bá Nhật GVHD: ThS.Trần Bửu Dung 7 Xây dựng website quản lý đặt phòng khách sạn Vinpearl + PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object- relational database management system) có mục đích chung, hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay. + PostgreSQL được phát triển dựa trên POSTGRES 4.2 tại phòng khoa học máy tính Berkeley, Đại học California. + PostgreSQL được thiết kế để chạy trên các nền tảng tương tự UNIX. Tuy nhiên, PostgreSQL sau đó cũng được điều chỉnh linh động để có thể chạy được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows.
+ PostgreSQL là một phần mềm mã nguồn miễn phí. Mã nguồn của phần mềm khả dụng theo license của PostgreSQL, một license nguồn mở tự do. Theo đó, bạn sẽ được tự do sử dụng, sửa đổi và phân phối PostgreSQL dưới mọi hình thức. + PostgreSQL không yêu cầu quá nhiều công tác bảo trì bởi có tính ổn định cao.
Do đó, nếu bạn phát triển các ứng dụng dựa trên PostgreSQL, chi phí sở hữu sẽ thấp hơn so với các hệ thống quản trị dữ liệu khác. + PostgreSQL hoạt động như một hệ quản trị dữ liệu mang tính mở, phù hợp để mọi doanh nghiệp khai thác. Đây là một hệ quản trị tương thích với hầu hết các nền tảng, ứng dụng đa ngôn ngữ, phần mềm phổ biến. + Ngày nay, PostgreSQL là một phần quan trọng của ngành dữ liệu GIS cho tổ chức chính phủ, ngành ngân hàng, thương mại, công nghệ web,.
PostgreSQL hoàn toàn không bị quản lý bởi bất kỳ tổ chức nào. Tuy vậy, việc không bị quản lý bởi bất kỳ tổ chức nào đôi khi lại là yếu điểm của PostgreSQL - Dưới đây là hệ tính năng vô cùng đa dạng của PostgreSQL + Kiểu dữ liệu: + Nguyên hàm: Số nguyên, số, chuỗi, Boolean + Cấu trúc: Date/Time, Array, Phạm vi, UUID + Document: JSON/JSONB, XML, Key-value (Hstore) + Hình học: Điểm, Đường thẳng, Vòng tròn, Đa giác + Tùy chỉnh: Composite, Các kiểu tùy chỉnh + Toàn vẹn dữ liệu: + UNIQUE, NOT NULL + Primary Keys + Foreign Keys + Ràng buộc loại trừ + Khóa hàm số/ Explicit Locks, Khóa khuyến nghị/ Advisory Locks + Đồng quy, hiệu suất: SVTH: Lê Bá Nhật GVHD: ThS.Trần Bửu Dung 8 Xây dựng website quản lý đặt phòng khách sạn Vinpearl + Lập danh mục: B-tree, Multicolumn, Expressions, Partial + Lập danh mục nâng cao: GiST, SP-Gist, KNN Gist, GIN, BRIN, Bloom filters + Trình lập kế hoạch / trình tối ưu hóa truy vấn phức tạp, quét index-only, thống kê số liệu trên nhiều cột.