Tổng hợp báo cáo BTL môn Hệ thống thông tin web| Môn Hệ thống thông tin web| Trường Đại học Bách Khoa Hà Nội
Tổng hợp báo cáo BTL môn Hệ thống thông tin web| Môn Hệ thống thông tin web| Trường Đại học Bách Khoa Hà Nội. Tài liệu gồm 289 trang giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kỳ thi sắp tới. Mời bạn đọc đón xem.
Preview text:
ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
TÀI LIỆU THIẾT KẾ VÀ XÂY DỰNG KHÓA HỌC GOLANG BASIC Version 1.1 FINAL PROJECT
HỆ THỐNG THÔNG TIN TRÊN WEB
Giảng viên hướng dẫn : Phạm Huy Hoàng Nhóm : Golang Basic Sinh viên thực hiện :
Hoàng Trọng Tân – 20194664 Trần Minh Quân - 20194654 Nguyễn Huy Linh 20194604 Vũ Tuấn Kiệt - 20194599
Nguyễn Tuần Nam - 20194629 Ngô Hoàng Vũ - 20194721 Bùi Hồng Minh - 20194619
Hà Nội, tháng 3 năm 2023 Contents
Lời mở đầu ....................................................................................................... 3
PHẦN I. NGHIÊN CỨU CƠ SỞ LÝ THUYẾT ........................................... 4
CHƯƠNG 1: TỔNG QUAN VỀ GOLANG .............................................. 4
1.1 Đặt vấn đề .......................................................................................... 4
1.2 Ưu nhược điểm của GOLANG ......................................................... 6
1.3 Sự khác biệt của Go so với các ngôn ngữ khác ................................. 8
CHƯƠNG 2 TÌM HIỂU VỀ ỨNG DỤNG GOLANG ........................... 11
2.1 Vị trí của GoLang trong quá trình phát triển Website .................... 11
2.2 Tình hình phát triển GoLang ........................................................... 11
2.3 Các ứng dụng của Golang ............................................................... 12
PHẦN II. THỰC NGHIỆM ......................................................................... 14
CHƯƠNG 1 XÁC ĐỊNH ĐỐI TƯỢNG HỌC ........................................ 14
1.1 Đối tượng học Giáo trình GoLang Basic ........................................ 14
1.2 Yêu cầu tối thiểu đối với học viên trước khi bắt đầu khóa học ...... 14
1.3 Kĩ năng Học viên sẽ đạt được sau khi tham gia khóa học .............. 14
CHƯƠNG 2. XÂY DỰNG GIÁO TRÌNH GOLANG BASIC .............. 15
2.1 Mục tiêu xây dựng Giáo trình Golang Basic................................... 15
2.2 Giới thiệu chung về Giáo trình GoLang Basic ................................ 15
CHƯƠNG 3 KẾT QUẢ VÀ KẾT LUẬN ................................................ 18
3.1 Kết quả ............................................................................................. 18
3.2 Kết luận ............................................................................................ 23
TÀI LIỆU THAM KHẢO ............................................................................ 24
PHÂN CÔNG CÔNG VIỆC ....................................................................... 24 Lời mở đầu
Trong những năm gần đây, cùng với sự phát triển về Công nghệ thông
tin và các phương tiện truyền thông, đặc biệt là Internet of Thing, Trí tuệ nhân
tạo AI, ...đã mang lại chuyển biến trong tất cả các lĩnh vực xã hội. Nền kinh tế
thế giới đang bước vào giai đoạn kinh tế tri thức. Đặc biệt là nền kinh tế này
là dịch vụ sẽ là khu vực được nhiều lao động tham gia nhất, đặc biệt là những
lao động có tri thức cao. Do đó việc nâng cao hiệu quả chất lượng giáo dục,
đào tạo sẽ là nhân tố quyết định sự tồn tại và phát triển của mỗi quốc gia,
công ty, gia đình và mỗi cá nhân.
Hiện nay, các học viên có xu hướng chuyển từ tìm kiếm thông tin trên
Google sang thông tin trong các trang Web uy tín. Ngoài ra, rất nhiều học
viên gặp KHÓ KHĂN trong quá trình tiếp cận các chương trình học chất
lượng cao. Vì cậy, cần đưa ra giải phát cho vấn đề này, một trong số đó chính
là tạo ra các chương trình học tập trực tuyến, dễ tiếp cận. Việc tạo ra một
trang Website mang lại các chương trình học tập chất lượng là nhiệm vụ quan
trọng trong giáo dục hiện nay.
Nhóm xây dựng khóa học Golang
PHẦN I. NGHIÊN CỨU CƠ SỞ LÝ THUYẾT
CHƯƠNG 1: TỔNG QUAN VỀ GOLANG 1.1 Đặt vấn đề
Bạn có biết khi nào nên dùng Golang? Dùng Golang đúng cách như thế
nào? Sau 8 năm hoạt động, ngôn ngữ Go của Google ra mắt phiên bản 1.8.1
vào tháng 4 năm 2017 được lựa chọn bởi các chuyên gia lập trình để trở thành
ngôn ngữ lập trình dành cho những dự án cloud-centric quan trọng nhất thế giới.
Tại sao Go được chọn bởi các nhà phát triển của những dự án
như Docker và Kubernetes? Đặc điểm của Go là gì? nó khác gì với các ngôn
ngữ lập trình khác và phù hợp cho loại dự án nào nhất? Trong bài này, chúng
ta sẽ khám phá những tính neăng của Go, trường hợp tối ưu, điểm thiếu sót và hạn chế của Golang.
Golang là gì? Tại sao chúng ta nên học Golang?
Go nhỏ gọn và đơn giản
Go hay Golang là sản phẩm được phát triển bởi các nhân viên của Google,
đặc biệt là kỹ sư nổi tiếng của Google, một chuyên gia về Unix, ông Rob Pike,
tuy nhưng đó không phải là một dự án của Google. Thay vào đó, Go được phát
triển như một dự án open source.
Go đơn giản để học, dễ làm việc và dễ dàng đọc bởi các nhà phát triển khác.
Và Go không hề có một bộ tính năng lớn, đặc biệt là khi so sánh với các ngôn
ngữ như C ++. Ngoài ra Go còn gợi nhớ đến C bởi cú pháp của nó, điều đó giúp
các lập trình viên C lâu năm tương đối dễ dàng học nó. Điều đó nói rằng, nhiều
tính năng của Go, đặc biệt là tính năng concurrency.
Tương tự như ngôn ngữ C được dùng để xây dựng và duy trì các ứng
dụng cross-platform, thì Go cũng có nhiều điểm chung với Java. Và khi nào
nên dùng golang? Nó như một phương tiện cho phép lập trình một cách nhanh
chóng mà có thể chạy ở bất cứ nơi nào, thì bạn có thể tưởng tượng Go và Python
giống nhau ở điểm này, mặc dù giữa chúng có nhiều điểm khác biệt hơn là tương đồng.
Dành cho tất cả mọi người
Tài liệu về Go, mô tả Go là “một ngôn ngữ biên dịch nhanh, static type,
compiled language (ngôn ngữ biên dịch), nhưng lại giống như một dynamic,
interpreted language (ngôn ngữ thông dịch)”. Ngay cả khi một chương trình Go
lớn, cũng sẽ được biên dịch chỉ trong vòng vài giây. Thêm vào đó, Go còn tránh
được những điểm hạn chế của C liên quan đến các file và thư viện. Nói tóm lại,
Go giúp cuộc sống của lập trình viên trở nên dễ dàng bằng nhiều cách: Tiện lợi:
Go được so sánh với các scripting language (ngôn ngữ kịch bản) như
Python với khả năng đáp ứng nhiều nhu cầu lập trình phổ biến. Một số tính
năng này được tích hợp vào trong chính ngôn ngữ, chẳng hạn như “goroutines”
là một hàm cho concurrency và kiểu giống như behavior, ngoài ra các tính năng
bổ sung được có sẵn trong các package thư viện Go chuẩn, như http
package của Go. Giống như Python, Go cung cấp khả năng quản lý bộ nhớ tự
động bao gồm việc garbage collection (dọn file rác).
Không giống các ngôn ngữ kịch bản như Python, Go biên dịch (compile)
code ra nhị phân một cách nhanh chóng. Và không giống như C hoặc C ++, Go
biên dịch cực nhanh, nhanh đến mức khiến bạn cảm thấy khi làm việc với Go
giống như là làm việc với một ngôn ngữ kịch bản hơn là một ngôn ngữ biên dịch. Tốc độ:
Run nhị phân chậm hơn so với C, nhưng sự khác biệt về tốc độ này không
đáng kể đối với hầu hết các ứng dụng. Hiệu suất của Go tốt ngang với C trong
phần lớn công việc và nói chung là nhanh hơn so với các ngôn ngữ khác nổi
tiếng về tốc độ (ví dụ: JavaScript, Python và Ruby). Linh hoạt:
Các file executable được tạo bằng toolchain của Go có thể hoạt động độc
lập mà không cần external dependencies mặc định. Toolchain hỗ trợ cho nhiều
hệ điều hành, hardware platform (chuẩn phần cứng của máy tính) khác nhau và
có thể được sử dụng để biên dịch các chương trình nhị phân qua các nền tảng.
Khả năng tương thích:
Go cung cấp tất cả những điều trên mà không bị mất quyền truy cập vào
hệ thống bên dưới (underlying system). Phương mềm Go có thể liên kết với thư
viện C bên ngoài hoặc thực hiện các lệnh call hệ thống native. Ví dụ trong
Docker, Go interface với các chức năng Linux low-level, cgroups và
namespace (tạm dịch: không gian tên), để hoạt động với container. Hỗ trợ:
Toolchain Go có sẵn dưới dạng binary của Linux, MacOS hoặc Windows
hoặc như là một container trong Docker. Go được đặt mặc định trong nhiều bản
phát hành phổ biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp
cho việc triển khai Go source trở nên dễ dàng hơn đối với các nền tảng trên. Go
cũng hỗ trợ mạnh mẽ cho nhiều development environment (môi trường phát
triển) của bên thứ ba, từ Microsoft Visual Studio Code đến Komodo IDE của ActiveState.
1.2 Ưu nhược điểm của GOLANG
KHI NÀO NÊN DÙNG GOLANG?
Khi nào nên dùng golang? Và dùng trong trường hợp nào? Không có
ngôn ngữ nào phù hợp với mọi loại công việc, nhưng có một số ngôn ngữ phù
hợp với nhiều mục đích hơn những ngôn ngữ khác. Mạnh mẽ khi phát triển một
số loại ứng dụng chính:
Phân phối các network service (dịch vụ mạng).
Các chương trình ứng dụng mạng (network application) sống hay chết là
dựa vào concurrency và các tính năng native concurrency của Go,
các goroutines và các channel, rất phù hợp cho các tác vụ đó. Do đó, có nhiều
dự án Go dành cho mạng, các chức năng distributed (phân phối) và dịch vụ
đám mây: API, web server, minimal frameworks cho các web application và các loại tương tự.
Sự phát triển của cloud-native.
Các tính năng concurrency và network của Go và tính linh hoạt cao của
nó làm cho nó phù hợp với việc xây dựng các ứng dụng cloud-native. Trên thực
tế, Go đã được sử dụng để xây dựng một trong những nền tảng phát triển ứng
dụng dựa trên cloud-native, ứng dụng hệ thống containerization Docker.
Thay thế cho cơ sở hạ tầng hiện có.
Phần lớn các phần mềm của chúng tôi phụ thuộc vào cơ sở hạ tầng
Internet đã lạc hậu. Việc viết lại những thứ như vậy bằng Go mang lại nhiều
lợi ích, như giữ an toàn bộ nhớ tốt hơn, triển khai trên nhiều nền tảng dễ dàng
hơn và một code base “sạch” để hỗ trợ bảo trì trong tương lai. Một server SSH
mới được gọi là Teleport và một phiên bản mới của Network Time Protocol
được viết bằng Go, được cung cấp như phương pháp thay thế cho các đối tác thông thường của họ.
GO KHÔNG PHÙ HỢP VỚI VIỆC GÌ
Go được thiết kế nhỏ gọn và dễ hiểu, vì vậy dẫn đến một số tính năng
nhất định bị bỏ qua. Thế nên một số tính năng phổ biến có trong các ngôn ngữ
khác thì lại không có trong Go.
Một trong những tính năng Go không có là generics, là kiểu biểu diễn
của Types dưới dạng tham số khi định nghĩa lớp, hàm và interfaces. Go không
bao gồm generics và steward của ngôn ngữ này ngăn cản việc thêm generics
vào vì cho rằng điều đó sẽ làm giảm tính đơn giản. Tuy vẫn có thể làm việc tốt
với Go, nhưng rất nhiều lập trình viên vẫn muốn thêm generics vào nó.
Nhược điểm khác của Go là kích thước của các chương trình. Code được
biên dịch kiểu static (tĩnh) theo mặc định. Cách này làm đơn giản hóa quá trình
xây dựng và triển khai, nhưng dẫn đến việc chỉ một đoạn code đơn giản “Hello,
world!” lại nặng đến khoảng 1,5MB trên Windows 64-bit. Nhóm nghiên cứu
của Go đang cố gắng để giảm kích thước của những chương trình này trong
những bản phát hành kế tiếp. Có những giải pháp cho việc này là nén file hoặc
xoá bỏ thông tin về debug của Go.
Tuy nhiên, một tính năng khác của Go, quản lý bộ nhớ tự động (AMM),
có thể được xem như là một nhược điểm, vì garbage collection (quá trình thu
gom file rác) đòi hỏi một số memory nhất định để xử lý. Theo thiết kế, Go
không thể quản lý bộ nhớ bằng tay và việc dọn dẹp file rác ở Go bị chỉ trích là
không thể giải quyết tốt các loại memory load (bộ nhớ tải) xuất hiện trong các
ứng dụng của doanh nghiệp.
Xét về mặt tích cực, Go 1.8 mang lại nhiều cải tiến trong quản lý bộ nhớ
và dọn dẹp file rác để giảm độ trệ (lag). Tất nhiên, các nhà phát triển Go có thể
sử dụng phân bố (allocation) bộ nhớ bằng tay trong một extension của C hoặc
bằng cách sử dụng thư viện quản lý bộ nhớ thủ công của bên thứ ba.
Tình hình xung quanh việc xây dựng một GUI (giao diện đồ họa người
dùng) phong phú cho các ứng dụng của Go, chẳng hạn như trong các ứng dụng
dành cho desktop, vẫn còn rải rác.
Hầu hết các sản phẩm từ Go là các command-line tool hoặc các dịch vụ
network. Mặc dù vậy, vẫn có rất nhiều dự án đang được thực hiện để mang lại
một GUI phong phú cho các ứng dụng của Go. Có các framework
như GTK và GTK3. Một dự án khác nhằm cung cấp platform-native UI, mặc
dù các giao diện này dựa vào các binding của C và không được viết bằng Go.
Ngoài ra, bởi vì Go được thiết kế là nền tảng độc lập, nên không có bất kỳ cái
gì được nêu ở trên có thể trở thành một phần của package chuẩn.
Sau cùng, tốc độ run ứng dụng và trình dọn dẹp file rác cho các ứng dụng
Go phụ thuộc vào hệ điều hành nằm bên dưới. (Các lập trình viên quan tâm đến
một ngôn ngữ dành cho loại công việc này có thể tìm hiểu Rust của Mozilla.)
1.3 Sự khác biệt của Go so với các ngôn ngữ khác
Kế thừa không có nghĩa là sao chép, thay vào đó là việc tìm ra một cách
hoàn toàn mới để giải quyết vấn đề, vì đôi khi để giải quyết một vấn đề, bạn
phải từ bỏ những gì không hiệu quả. Và kết quả là, mọi tính năng chính của Go
hầu hết đều bắt nguồn từ những hạn chế chính, chẳng hạn như:
Có chủ ý đơn giản hóa và cú pháp rõ ràng để dễ đọc, dễ học và bắt đầu.
Có ngữ nghĩa được đánh máy nghiêm ngặt, an toàn và hoàn toàn tĩnh để
xử lý các lỗi tĩnh tại thời điểm biên dịch, đồng thời tăng tốc độ thực thi và xây dựng
Có một bộ thu gom rác, để giải quyết tình trạng mất an toàn bộ nhớ
nhưng vẫn giữ tốc độ thực thi cao hợp lý và hiệu quả tài nguyên
Thiếu các tính năng phổ biến và syntax sugar để tối thiểu hóa, chính xác
và đơn giản để giải quyết một vấn đề cụ thể
Không có các nguyên tắc hướng đối tượng phổ biến như kế thừa, các lớp
và giao diện thông thường, điều này ngày càng trở nên thường xuyên hơn kể từ
sự gia tăng của các ngôn ngữ hướng chức năng, mặc dù Go cũng một phần nào
là ngôn ngữ đa mô hình.
Có Vendoring (được thay thế bằng Mô-đun Go kể từ 1.11), một hệ thống
quản lý phụ thuộc mạnh và trình hợp dịch của nó cực kỳ gần với mã nhị phân
để đạt được các bản dựng siêu nhanh, nhẹ và hiệu quả. Điều đó làm cho nó trở
thành một sự kết hợp hoàn hảo cho mô hình kiến trúc microservice và cho sự
phát triển trên nền tảng đám mây nói chung.
Không có xử lý ngoại lệ try-catch mặc dù bị tranh cãi và bị chỉ trích rất nhiều
Như đã thấy, các nhà phát triển của Go đã cố gắng đưa ra một hệ thống
ràng buộc dựa trên ngôn ngữ rất hiệu quả để đạt được một số đặc điểm và tính
năng xịn xò nhất của nó. Bằng cách sử dụng các ràng buộc đơn lẻ để đạt được
đồng thời không chỉ một mà là nhiều tính năng chính cùng một lúc.
Ngoài ra, tại thời điểm này, rõ ràng là Go không giống như các ngôn ngữ
khác được phát triển phổ biến bằng cách thêm các tính năng mới, sau đó mới
tăng độ phức tạp rồi hội tụ mà Go đã tiếp cận theo cách để khắc phục các hạn chế ngay từ đầu.
“Nhiều người mới sử dụng Go cần những tính năng ở các ngôn ngữ cũ
họ sử dụng. Nhưng những tính năng đó không thuộc về Go. Thêm các tính năng
vào Go sẽ không làm cho nó tốt hơn mà chỉ khiến nó nặng nề hơn. ”. - Rob
Pike, người tạo ra Golang đã nói.
Các tính năng riêng biệt
Tuy nhiên, điều đó không có nghĩa là Go bị thiếu hoặc thiếu một số tính
năng quan trọng. Tuy nhiên,để đơn giản, Go đã cân nhắc về việc không có các
tính năng phức tạp hơn mà không giải quyết được vấn đề.
Một số điều “đơn giản” trong Go:
Trên thực tế, bộ thu gom rác (Gabage Collectors) là tính năng đơn giản
nhất của Go, vì nó không có bất kỳ giao diện điều khiển nào. Tuy nhiên, đơn
giản nhất cũng là phức tạp nhất vì nó quản lý để cung cấp sự an toàn cho bộ
nhớ trong khi tiết kiệm tốc độ thời gian chạy cực cao và cung cấp hiệu quả tài nguyên đáng ngạc nhiên.
Concurrency hay còn gọi là Goroutines - 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. Nó thường được biết đến
là cách triển khai dễ dàng và đơn giản nhất của concurrency model cho đến
nay. Trên thực tế, quá trình tạo ra một quy trình con mới đơn giản gần như
không làm gì cả. Tất cả những gì bạn cần làm chỉ là gõ Go.
Interfaces (các giao diện) là một trong những đặc điểm khác biệt và dễ
nhận biết nhất của Golang. Giải pháp thiết kế độc đáo của họ tự giải quyết hầu
hết các chỉ trích của OOP, cho phép tính trực giao và các kiến trúc thành phần.
Packages hoạt động trơn tru. Bằng cách sử dụng công cụ go get, bạn có
thể làm điều đó ở bất cứ đâu: Gopkg, GitHub, GitLab, BitBucket, thậm chí cả
nguồn kho lưu trữ được lưu trữ của riêng bạn từ khi "vanity” được biết đến.
Tuy nhiên nó cũng khá phức tạp để cho phép thành phần hóa, mô-đun, khả năng
mở rộng, chia sẻ, ẩn dữ liệu và cô lập, v.v.
Thư viện chuẩn của Go chứa rất nhiều tính năng tiện dụng tuyệt vời
chứng tỏ rằng Golang trên thực tế là một ngôn ngữ khá giàu tính năng. Tuy
nhiên, cách chúng được thực hiện là một điều gì đó khiến nó trở nên độc đáo.
Reflection - Đặc biệt, ngôn ngữ này không đơn giản để sử dụng như
những ngôn ngữ khác. Mặc dù vậy, Go vẫn cố gắng tận dụng relfection tối đa
trong khi vẫn giữ cho nó tương đối dễ sử dụng.
CHƯƠNG 2 TÌM HIỂU VỀ ỨNG DỤNG GOLANG
2.1 Vị trí của GoLang trong quá trình phát triển Website
Lập trình backend với Golang
Golang là một ngôn ngữ lập trình được phát triển bởi Google, Go mang
đến hiệu suất tốt cú pháp tinh gọn dễ dàng học và làm quen. Dựa trên Golang
chúng ta có thể xây dựng hệ thống backend một cách thuận tiện, nhanh chóng và hiệu quả.
Hiện Golang được sử dụng rất rộng rãi trong phát triển backend cho
website với các lợi ích chính sau đây:
Công nghệ mạnh mẽ và dễ mở rộng cho phát triển ứng dụng web
Xây dựng microservices, kiểm soát luồng điều khiển đơn giản và nhanh chóng
Xử lý dữ liệu mạnh mẽ với nhiều thư viện có sẵn
Cộng đồng người làm lập trình Golang nhiều và nhiệt tình hỗ trợ người
học và làm việc với Golang
Lập trình web backend với Golang đang là một trong các công được
tuyển dụng nhiều nhất trên thị trường việc làm với mức lương hàng tháng có
thể lên đến 50-60 triệu đồng tùy vào khả năng, kinh nghiệm và vị trí công việc.
Người lập trình backend với Golang có thể xin việc tại các công ty và
tập đoàn lớn như FPT, Viettel, các công ty phần mềm thuộc Hiệp hội phần mềm
VINASA, hay các công ty phần mềm thuộc Hiệp hội xuất khẩu phần mềm VNITO.
2.2 Tình hình phát triển GoLang
Với đặc điểm của mình, Golang có thể ứng dụng trong nhiều lĩnh vực,
như trong phát triển Web Backend, phát triển ứng dụng mobile (với vai trò
server), trong các hệ thống microservice hay ERP (Enterprise - Resource - Planning).
Có thể nói, Golang đang phát triển rất nhanh, tốc độ ngày một tăng cao,
tiếp cận dễ dàng, các phương thức bảo mật được cải thiện mạnh mẽ giúp nó
ngày càng trở nên chiếm ưu thế hơn.
Đâu là con đường phát triển tương lai của Go?
Go có thể đang ở một “ngã ba đường”. Giai đoạn phát triển tiếp theo của
Go có thể được thúc đẩy bởi nhu cầu phát triển cơ bản của nó, Go cần chú ý về
việc thay đổi ngôn ngữ để có thể đáp ứng tốt hơn, chứ phải cứ cứng đầu mà
không thay đổi. Nói cách khác, Go hoàn toàn có thể thêm các tính năng mà ban
đầu nó không có, giống như generics.
Các lập trình viên sử dụng Golang rõ ràng muốn những điều này. Một
cuộc khảo sát ý kiến người dùng Golang vào năm 2016 đã xác định được khi
nào nên dùng golang, và generic là một trong những thay đổi mang tính cải
thiện nhất, tiếp theo là dependency và package management. Những thay đổi
này có thể giúp Go đạt một vị trí cao trong giới lập trình nơi mà Java, JavaScript
và Python hiện đang thống trị .
Ngay cả khi không có bất kỳ sự thay đổi lớn nào đối với Go, thì tôi luôn
mong được thấy Go sử dụng cho việc xây dựng lại cơ sở hạ tầng và trở thành
một phần của dự án sử dụng multi-language (đa ngôn ngữ). Một dự án có sử
dụng Go trong một phần của việc lập trình hệ thống đó là Ethos, một hệ điều
hành như một phần mềm bảo mật chất lượng cao. Kernel được viết bằng C,
nhưng userspace của ứng dụng được viết bằng Go, đây là một cách thông minh
để tận dụng những gì phù hợp với C, trong khi vẫn có thể tận dụng các thế mạnh của Go.
Việc triển khai của bên thứ ba đối với công cụ Go cũng đang lan rộng.
ActiveGo của ActiveState cung cấp một phiên bản được hỗ trợ về mặt thương
mại của Golang và cả LLVM cùng các dự án gccgo được triển khai open source của Go bằng toolchain.
Một cách khác mà Go có thể phát triển là tồn tại như một nền tảng để
phát triển các ngôn ngữ hoàn toàn mới khác. Một ví dụ là ngôn ngữ Have. Sử
dụng nhiều ý tưởng từ Go và transpile vào Go để dễ thực hiện, nhưng tinh gọn
cú pháp của Go và hiện thực hoá một số các concept tương tự những theo cách
riêng. Một dự án khác có tên Oden, tiếc là không còn được phát triển, sử dụng
assembler và toolchain của Go để biên dịch một ngôn ngữ mới được thiết kế
dựa trên cảm hứng từ các ngôn ngữ khác như Lisp và Haskell.
Tương lai của Golang chỉ mới bắt đầu giờ bạn đã biết khi nào nên dùng
golang. Nhưng chắc chắn nó sẽ được sử dụng trong cloud, nơi mà tốc độ và sự
đơn giản của nó giúp dễ dàng xây dựng một cơ sở hạ tầng có thể mở rộng, có
thể được duy trì trong thời gian dài.
2.3 Các ứng dụng của Golang
Phân phối các dịch vụ mạng: Các chương trình ứng dụng mạng có tồn
tai được hay không là phụ thuộc hoàn toàn vào các tính năng native concurrency
và native concurrency của golang. Vì vậy mà Golang có rất nhiều dự án cho
nhà mạng với các chức năng phân phối và dịch vụ đám mây như API, web
server và minimal frameworks.
Xây dựng và phát triển các cloud-native: Golang có các tính năng là
network và concurrency với tính linh hoạt cao khiến nó phù hợp với việc xây
dựng và phát triển các ứng dụng cloud-native. Trên thực tế, golang đã được áp
dụng trong việc thiết lập một trong những nền tảng bằng cách ứng dụng hệ
thống containerization Docker và dựa trên cloud-native.
Thay thế cơ sở hạ tầng: Sự thật là phần lớn các phần mềm đều phụ thuộc
vào những cơ sở hạ tầng internet đã trở nên lỗi thời, lạc hậu. Vì vậy, khi viết
lại và thay thế cơ sở hạ tầng bằng golang thì các nền tảng sẽ được triển khai
nhiều hơn, bộ nhớ được giữ an toàn tốt hơn, mang lại nhiều lợi ích hơn và có
một codebase sạch để hỗ trợ bảo trì. PHẦN II. THỰC NGHIỆM
CHƯƠNG 1 XÁC ĐỊNH ĐỐI TƯỢNG HỌC
1.1 Đối tượng học Giáo trình GoLang Basic
- Học viên mong muốn được tìm hiểu về cấu trúc, cú pháp của ngôn ngữ lập trình Golang.
- Học viên muốn bắt đầu học các kiến thức cơ bản về lập trình, lập
trình Web BackEnd, tạo API trên Web.
- Học viên muốn viết một Project nhỏ bằng ngôn ngữ Golang.
- Học viên muốn sử dụng ngôn ngữ Golang để tiếp cận cơ sở hạ tầng
về máy chủ đám mây lớn bằng.
- Học viên mong muốn xây dựng các chương trình network application bằng Golang.
- Học viên muốn tìm hiểu thêm các ngôn ngữ mới ngoài các ngôn ngữ đã học.
1.2 Yêu cầu tối thiểu đối với học viên trước khi bắt đầu khóa học
+ Về phần chuẩn bị công cụ lập trình:
- 01 máy tính có kết nối Internet, chạy trên hệ điều hành Ubuntu hoặc Windowns 10.
+ Về kiến thức lập trình: Không có.
1.3 Kĩ năng Học viên sẽ đạt được sau khi tham gia khóa học
- Cài đặt được ngôn ngữ Golang phù hợp với Máy tính của Học viên.
- Nhớ, hiểu và viết được các chương trình Golang đúng cú pháp.
- Biết cách khai báo biến, hằng số trong Golang.
- Nắm được các kiểu dữ liệu, một số cấu trúc dữ liệu có trong Golang.
- Nắm được các cấu trúc điều khiển trong Golang: Cấu trúc rẽ nhánh (If Else), cấu trúc lặp.
- Lập trình đa luồng với Golang sử dụng Goroutines, giao tiếp giữa các luồng qua Channels.
- Tạo được API bằng Golang.
- Kết nối Golang với Database.
- [Tùy chọn] Tạo được module trong Golang.
- [Tùy chọn] Xử lý các lỗi response trong Golang.
1.4 Thời gian để Học viên hoàn thành khóa học
- Syntax Golang: 2 giờ 20 phút
- Restful API with go: 1 giờ 40 phút
- Todo List: Tổng thời gian: 1 giờ 11 phút
Tổng thời gian: 5h 10 phút.
CHƯƠNG 2. XÂY DỰNG GIÁO TRÌNH GOLANG BASIC
2.1 Mục tiêu xây dựng Giáo trình Golang Basic
- Học viên hiểu biết về khái niệm, lịch sử hình thành, các ưu nhược điểm của Golang.
- Giúp cho học viên có hiểu biết cơ bản về cú pháp, cấu trúc chương trình ngôn ngữ Golang.
- Học viên có thể tự tạo Web API bằng Golang.
- Học viên có thể tự tạo một Project nhỏ bằng Golang.
2.2 Giới thiệu chung về Giáo trình GoLang Basic - Gồm 4 phần chính:
+ Giới thiệu chung về ngôn ngữ Golang và khóa học Golang Basic.
+ Giới thiệu về cú pháp, cấu trúc chương trình của Golang.
+ Giới thiệu về các tạo Web API bằng Golang.
+ Giới thiệu về cách tạo Project nhỏ bằng API.
2.3 Xây dựng các thành phần chính của khóa học GoLang Basic Golang Syntax Introduction- Setting Up a
+ Hướng dẫn cài đặt go trong Development Environment Windows và Ubuntu Variables
+ Học về các kiểu variables có trong Golang
+ Giới thiệu qua về các kiểu dữ liệu trong GoLang
+ Hiới thiệu về các primitives trong golang
+ Hướng dẫn cách khai báo biến
+ Hướng dẫn chạy chương trình trong golang + Bài tập:
- Bài tập nhận biết kiểu
- Bài tập code một chương trình tính toán cơ bản
+ Naming convention trong golang Constants + Cách khai báo hằng số
+ Lưu ý về cách làm việc với các hằng số khác kiểu Arrays and Slices
Học về mảng trong Golang: - Khai báo
- Truy cập vào phần tử mảng - Độ dài mảng - Vòng lặp mảng - Mảng đa chiều
Học về kiểu dữ liệu slices - Tạo 1 slices
- Độ dài và sức chứa slices
- Thêm phần tử vào slices
- Truyền 1 slices vào function - Slices đa chiều Maps and Structs Học về maps: - Khai báo - Làm việc với mảng
- Truyền maps giữa các hàm Học về Structs: - Định nghĩa - Khởi tạo biến struct
- Truy xuất đến các trường trong struct If and Switch Statements
Học về các kiểu rẽ nhánh trong Golang: + If + If Else + If Else If Else + Switch Ứng dụng bài tập Looping
Học về cú pháp lặp trong Golang: + Lặp cố định + Lặp vô hạn
+ Lặp qua từng phần tử Ứng dụng bài tập Defer, Panic, and Recover
Giới thiệu về 3 cơ chế: defer, panic và recover. Pointers
Học về cách khai báo và sử dụng con trỏ Functions
Học về cú pháp và cách xây dựng hàm trong Golang: + Cú pháp hàm + Tham số + Kiểu trả về Interfaces Goroutines
Học về cách sử dụng goroutine để
xử lý đồng thời nhiều tác vụ Channels
Học cách giao tiếp bộ nhớ giữa các
goroutines thông qua channel, cách
khai báo channel và sử dụng select Kiểm tra Syntax
Kiểm tra lại về các kiến thức cơ bản
đã được học ở Syntax Golang.
Câu hỏi dưới dạng điều vào chỗ
trống và ở mức độ dễ, chủ yếu giúp
người học hệ thống lại kiến thức Restful API with go Restful API là gì Giới thiệu API là gì? Tạo API đầu tiên
Tạo API lấy dữ liêu mẫu Post API
Thêm một dữ liệu mới với POST Get API với Id
Lấy một bản ghi chỉ định Kết nối database
Kết nối cơ sở dữ liệu mysql
Lấy tất cả bản ghi từ database
Lấy tất cả dữ liệu từ database với API có sẵn. Thêm bản ghi vào database
Thêm một bản ghi thông qua API
Lấy một bản ghi từ database
Lấy một bản ghi thông qua API [Tùy chọn] Module
Giới thiệu về module trong Go
[Tùy chọn] Xử lý lỗi trong Golang Cách xử lí lỗi trong Go Todo List Project Review Project
Video giới thiệu kết quả sau khi hoàn thành.
Giới thiệu cấu trúc project
Video giới thiệu về cấu trúc thư mục và các file trong project.
Link git chứa mã nguồn frontend và code golang qua từng bài.
Giới thiệu các endpoint troing
Video giới thiệu các api sẽ làm. project
Xây dựng cấu trúc project
Video khởi tạo project theo cấu trúc đã giới thiệu.
API đọc toàn bộ dữ liệu
Video xây dựng api đọc toàn bộ dữ liệu. API thêm dữ liệu
Video xây dựng api thêm dữ liệu. API cập nhật dữ liệu
Video xây dựng api cập nhật dữ liệu.
API xóa dữ liệu dựa theo id
Video xây dựng api xóa dữ liệu dựa theo id.
API xóa toàn bộ dữ liệu
Video xây dựng api xóa toàn bộ dữ liệu. Fixbug và hoàn thành
Video hướng dẫn xử lý CORS và hoàn thành khóa.
CHƯƠNG 3 KẾT QUẢ VÀ KẾT LUẬN 3.1 Kết quả - Kết quả Golang Syntax - Kết quả restful API