CHƯƠNG 1: TỔNG QUAN VỀ GOLANG VÀ ANGULAR 1. Tổng quan về GoLang 1. Giới thiệu GoLang Go là một ngôn ngữ lập trình được thiết kế dựa trên tư duy lập trình hệ thống. Go được phát triển bởi Robert Griesemer, Rob Pike và Ken Thompson tại Google vào năm 2007.
Điểm mạnh của Go là bộ thu gom rác và hỗ trợ lập trình đồng thời (tương tự như đa luồng – multithreading). Go là một ngôn ngữ lập trình đồng bộ, được biên dịch có cú pháp khá cơ bản như C/C++, Java, Pascal… Go được giới thiệu vào năm 2009 và được sử dụng hầu hết trong các sản phẩm của Google. Người ta thường sử dụng Go cho Backend Application hoặc hệ thống API nâng cao. Trong năm 2019 này, Go sẽ phát triển Go Module giúp cho việc triển khai dự án Go dễ dàng hơn, giảm sự phụ thuộc vào GoPath như trước đây.
Trang web chính thức của ngôn ngữ GoLang là http://golang. Ngôn ngữ GoLang có một hình thái và ngữ nghĩa lập trình riêng giúp nó đảm bảo hiệu suất làm việc mà vẫn mang lại những điều thú vị khi ta lập trình với nó. GoLang cũng cung cấp một bộ thư viện chuẩn khá toàn diện, nó cung cấp tất cả các package cốt lõi cần để xây dựng chương trình. Một số đặc điểm của GoLang Các đặc điểm nổi bật của GoLang có thể liệt kê ra gồm có: - Go là ngôn ngữ lập trình biên soạn (compiled language).
Phần mềm viết bởi Go cần được biên soạn sử dụng Go compile trước khi có thể chạy được. - Go có cú pháp tương tự như C. - Go là ngôn ngữ lập trình kiểu tĩnh (hay static type), các biến hoặc dữ liệu trong GoLang sẽ không thay đổi trong suốt chương trình. - GoLang hỗ trợ xử lí đa luồng multi-threadiing thông qua các khái niệm -4- GoRoutine và Channel.
- GoLang hỗ trợ tính năng quản lí bộ nhớ mạnh mẽ mà C không có. - GoLang sở hữu một bộ thư viện phong phú mà lập trình viên có thể tận dụng. Ngôn ngữ lập trình GoLang đã được ra mắt cộng đồng vào tháng 11/2019 và được sử dụng trong một số hệ thống của gã khổng lồ công nghệ Google. Ngoài ra GoLang cũng là ngôn ngữ được sử dụng để viết phần mềm nổi tiếng Docker.1: Các đặc điểm của GoLang 1.
Các tính năng cốt lõi của GoLang Các tính năng của GoLang có thể liệt kê ra như sau: -5- - Cross platform: Ngôn ngữ Go cũng biên dịch như Java, nhưng không như Java phải cần Java Virtual Machine để thực thi vì Java biên dịch ra Byte code. Go biên dịch ra mã máy (Machine code) nên có thể chạy ngay với hệ điều hành nó biên dịch mà không cần cài đặt gì thêm. Nghĩa là từ máy tính của mình có thể biên dịch ra các chương trình chạy được trên Mac, Windows, Linux sau khi biên dịch, chỉ cần 1 file duy nhất, copy đến hệ điều hành đích là chạy, rất đơn giản! Đây là tính năng ấn tượng nhất, bao gồm cả việc build rất nhanh. - Sử dụng nhiều Core: Ở những năm 90, một trong những thay đổi lớn nhất của phần cứng máy tính đó chính là việc bổ sung thêm các core.
Quad-cores và Octa- cores CPUs giúp nâng cao đáng kể hiệu năng xử lí. Tuy nhiên, các ngôn ngữ được tạo ra vào trước thời điểm đó chỉ chạy trên các máy tính đơn nhân, và chúng được xây dựng không phải chủ đích để chạy trên nhiều nhân của CPU. Nhưng Go thì khác, việc sinh sau đẻ muộn đã tạo ra lợi thế cho nó, phần cứng có thể mở rộng core, khiến cho Go trở thành ngôn ngữ có thể dễ dàng tương thích hơn. - Vấn đề tương tranh (Concurrency và Goroutine): Concurrency là tính năng chủ lực của ngôn ngữ lập trình Go để tận dụng năng lực xử lí của CPU.
Thông thường các ngôn ngữ lập trình khác phải phụ thuộc sự cấp phát tài nguyên của hệ thống điều hành để có thể chạy được concurrency, trong khi đó Go có thể chạy concurrency mà không phụ thuộc hệ điều hành. Khái niệm concurrency gần giống với thread, các tác vụ trong concurrency được gọi là goroutine. Trong Go thì việc giao tiếp giữa các goroutine khá đơn giản với channel (kênh), có thể truyền dữ liệu giữa các goroutine với nhau bằng bất cứ loại dữ liệu nào. Nhờ việc sử dụng bộ vi xử lí đa nhân, mỗi goroutine chỉ sử dụng 2KB bộ nhớ, như vậy chúng ta có thể tạo ra hàng triệu goroutine bất kỳ lúc nào.
Goroutine đem lại những lợi ích: + Sử dụng bộ nhớ một cách linh hoạt cho vùng nhớ stack, sẽ tự tăng vùng nhớ khi cần thiết. + Thời gian khởi động của goroutine nhanh hơn so với Thread. + Giao tiếp giữa các goroutine sử dụng channel cực an toàn. -6- + Goroutine và OS Thread không tồn tại song song nhau.
Mỗi goroutine có thể chạy đồng thời nhiều threads, chúng có thể ghép vào OS Threads. - Dễ dàng bảo trì: Cú pháp của Go cực kì đơn giản, không có những cú pháp quá phức tạp giống như các ngôn ngữ khác. Những người phát triển Go đến từ Google, nới có quy mô code-base lớn và hàng nghìn developers cùng làm việc. Vì vậy source code phải đơn giản để bất kì developers nào cũng có thể hiểu được và mỗi đoạn code đều hạn chế tối thiểu side-effect.
Điều đó làm cho code có thể bảo trì hoặc nâng cấp một cách dễ dàng và đơn giản hơn. - Bỏ qua nhiều đặc tính của lập trình OOP: Không có class mà mọi thứ đều được gói vào trong các package. Go chỉ có struct (cấu trúc). Không hỗ trợ kế thừa, không có constructor (hàm tạo), annotation (chú thích), generics (kiểu dữ liệu không định nghĩa trước) hay exceptions (xử lí ngoại lệ).
Chính vì vậy mà Go trở nên khác biệt so với phần còn lại. Nhìn theo mặt tích cực, nó khiến code trở nên sáng sủa, ngắn gọn và dễ hiểu hơn. Ưu điểm và nhược điểm của GoLang a) Ưu điểm: - Tốc độ thực thi nhanh nhờ biên dịch thẳng ra mã máy. - Linh hoạt: Trình compile biên dịch ra mã nhị phân và chạy được trên các nền tảng hệ điều hành khác nhau.
- Khả năng tương thích: Có thể liên kết với các thư viện bên ngoài hoặc thực hiện các lệnh gọi hệ thống. - Hỗ trợ: Go được cài đặt mặc định trong nhiều bản phát hành phổ biến của Linux cũng như nhận được sự hỗ trợ tương thích trên nhiều IDE (Visual studio code, Atom, Komodo IDE, GoLand). b) Nhược điểm: - Do kích thước nhỏ gọn nên một số tính năng trong lập trình OOP sẽ không có trong Go. - Kích thước chương trình sau khi đóng gói lớn: Code được biên dịch theo kiểu static theo mặc định.
Các này làm đơn giản hoá quá trình xây dựng và triển khai -7- nhưng dẫn đến chỉ một đoạn code đơn giản “Hello world!” lại nặng đến 1.5MB trên windows 64-bit. - Document page không được trau chuốt như những ngôn ngữ khác. - Quản lí lỗi trong GoLang đòi hỏi bạn phải thực hiện kiểm tra lỗi rõ ràng, có thể khiến cho việc xử lí lỗi trở nên khó khăn. Tuy nhiên nếu hiểu được các quản lí lỗi trong GoLang thì nó sẽ trở thành ưu điểm vì bạn sẽ có một ứng dụng về tổng thể là sạch hơn.
Cài đặt GoLang và yêu cầu hệ thống Cài đặt môi trường GoLang khá đơn giản, thông qua các bước như sau: - Bước 1: Cài đặt Go runtime Hình 1.2: Các bộ cài đặt của Go trên các nền tảng Truy cập vào website https://golang.org/dl và chạy file go<version>.msi (32-bit) hoặc go<version>.msi (64- bit), tuỳ vào hệ điều hành bạn đang sử dụng. Bộ cài này rất tiện lợi, nó sẽ tự động config hết mọi thứ cần thiết. - Bước 2: Cài đặt biến môi trường: Click chuột phải vào My computer chọn Properties, chọn tab Advanced và click nút Enviroment Variables. Tạo một biến mới tên là GoRoot với giá trị là C:\Go.
Sau đó chọn biến PATH có sẵn, thêm vào sau dấu chấm phẩy; cuối dòng đường dẫn sau: C:\Go\bin -8- Hình 1.3: Thiết lập biến môi trường cho Go - Bước 3: Chạy thử Vào terminal trên Linux/MacOS hoặc command line trên Windows và gõ lệnh sau: $go version. Nếu Go được cài đặt đầy đủ thì nội dung ouput sẽ giống như thế này: go version go1.4: Kiểm tra thiết lập môi trường Go - Bước 4: Viết chương trình đầu tiên với GoLang Hiện nay có rất nhiều IDE hỗ trợ cho lập trình Go, trong đó có thể kể đến như Visual Studio Code, Atom, LiteIDE, Wide… Một IDE nữa rất mạnh mẽ và được tạo ra nhằm cung cấp môi trường làm việc tốt nhất cho Go đó chính là GoLand – IDE trên nền tảng IntelliJ với tính năng hỗ trợ mã hoá, trình gỡ lỗi và thiết bị đầu cuối tích hợp. Ở đây em chọn GoLand làm IDE để lập trình GoLang. Giao diện startup của GoLand: -9- Hình 1.5: Giao diện Startup phần mềm GoLand Chọn New Project => sau đó chọn kiểu project là Go Module rồi thiết lập project name,các cấu hình khác ta có thể để mặc định, sau đó nhấn chọn Create.6: Tạo dự án GoLang Cấu trúc project của chương trình Go như hình bên.
Trong đó ta để ý đến Extenal Libraries. Đây chính là cơ chế quản lí package trong Go. Mỗi package chính là một project GoLang được viết sẵn cho những mục đính cụ thể và chúng ta có thể gọi ra để sử dụng khi cần. Nó giống như việc Add reference các thư viện dll trong lập trình C#.7: Cấu trúc dự án Go Để cài đặt thêm package, trong terminal của GoLand ta dùng lệnh go get <package-name>.
Hầu hết các package của Go đều nằm trên github. Ví dụ để cài package gorm (Database ORM cho Go), ta gõ như sau: Go get github.com/jinzhu/gorm Quá trình cài đặt diễn ra tự động, sau khi cài xong ta có thể sử dụng được các function có trong package này phục vụ cho mục đích làm việc cụ thể. Ta tiến hành tạo file main.go rồi gõ nội dung vào như sau: package main import ( "fmt" "net/http" ) func main() { fmt.ListenAndServe(":3000",nil) } func Hello(w http.Fprintf(w,"Hello World!") } - 11 - Mở terminal và gõ lệnh go build như sau: go build, sau đó dùng lệnh go run main.go để chạy chương trình: ta được kết quả là dòng chữ Hello GoLang. Mở trình duyệt lên và gõ địa chỉ localhost:3000, ta đã in ra được dòng chữ Hello world trên màn hình.8: Kết quả sau khi chạy thử chương trình 1.
Tổng quan về Angular 1. Lịch sử phát triển và các phiên bản của Angular Angular (hay còn được gọi là Angular 2+) là một nền tảng ứng dụng web sử dụng typescript do Angular Team của Google phát triển nên. Angular là một phiên bản viết lại hoàn chỉnh của AngularJS. Đây là một framework UI mạnh và mềm dẻo cho phép các lập trình viên xây dựng ứng dụng đa nền tảng, đặc biệt trên nền web.