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.

ĐẠI HC BÁCH KHOA HÀ NI
TRƯỜNG CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
TÀI LIU THIT K VÀ XÂY DNG KHÓA HC GOLANG BASIC
Version 1.1
FINAL PROJECT
H THNG THÔNG TIN TRÊN WEB
Giảng viên hướng dn : Phm Huy Hoàng
Nhóm : Golang Basic
Sinh viên thc hin :
Hoàng Trng Tân 20194664
Nguyn Huy Linh 20194604
Nguyn Tun Nam - 20194629
Bùi Hng Minh - 20194619
Trn Minh Quân - 20194654
Vũ Tun Kit - 20194599
Ngô Hoàng Vũ - 20194721
Hà Ni, tháng 3 năm 2023
Contents
Li m đầu ....................................................................................................... 3
PHN I. NGHIÊN CỨU CƠ S LÝ THUYT ........................................... 4
CHƯƠNG 1: TỔNG QUAN V GOLANG .............................................. 4
1.1 Đặt vấn đề .......................................................................................... 4
1.2 Ưu nhược điểm ca GOLANG ......................................................... 6
1.3 S khác bit ca Go so vi các ngôn ng khác ................................. 8
CHƯƠNG 2 TÌM HIỂU V NG DNG GOLANG ........................... 11
2.1 V trí ca GoLang trong quá trình phát trin Website .................... 11
2.2 Tình hình phát trin GoLang ........................................................... 11
2.3 Các ng dng ca Golang ............................................................... 12
PHN II. THC NGHIM ......................................................................... 14
CHƯƠNG 1 XÁC ĐỊNH ĐỐI TƯỢNG HC ........................................ 14
1.1 Đối tượng hc Giáo trình GoLang Basic ........................................ 14
1.2 Yêu cu ti thiểu đi vi học viên trước khi bắt đu khóa hc ...... 14
1.3 Kĩ năng Học viên s đạt được sau khi tham gia khóa hc .............. 14
CHƯƠNG 2. XÂY DỰNG GIÁO TRÌNH GOLANG BASIC .............. 15
2.1 Mc tiêu xây dng Giáo trình Golang Basic................................... 15
2.2 Gii thiu chung v Giáo trình GoLang Basic ................................ 15
CHƯƠNG 3 KẾT QU VÀ KT LUN ................................................ 18
3.1 Kết qu ............................................................................................. 18
3.2 Kết lun ............................................................................................ 23
TÀI LIU THAM KHO ............................................................................ 24
PHÂN CÔNG CÔNG VIC ....................................................................... 24
Li m đầu
Trong nhng năm gần đây, cùng vi s phát trin v Công ngh thông
tin và các phương tiện truyn thông, đặc bit là Internet of Thing, Trí tu nhân
to AI, ...đã mang li chuyn biến trong tt c các lĩnh vc xã hi. Nn kinh tế
thế gii đang bước vào giai đon kinh tế tri thc. Đặc bit là nn kinh tế này
là dch v skhu vc được nhiu lao động tham gia nht, đặc bit là nhng
lao động có tri thc cao. Do đó vic nâng cao hiu qu cht lượng giáo dc,
đào to s là nhân t quyết định s tn ti và phát trin ca mi quc gia,
công ty, gia đình và mi cá nhân.
Hin nay, các hc viên có xu hướng chuyn 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, rt nhiu hc
viên gp KHÓ KHĂN trong quá trình tiếp cn các chương trình hc cht
lượng cao. Vì cy, cn đưa ra giải phát cho vn đ này, mt trong s đó chính
là to ra các chương trình hc tp trc tuyến, d tiếp cn. Vic to ra mt
trang Website mang li các chương trình hc tp cht lượng là nhim v quan
trng trong giáo dc hin nay.
Nhóm xây dng khóa hc Golang
PHN I. NGHIÊN CU CƠ S LÝ THUYT
CHƯƠNG 1: TỔNG QUAN V GOLANG
1.1 Đặt vn đề
Bn biết khi 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 ca Google ra mt phiên bn 1.8.1
vào tháng 4 năm 2017 được la chn bi các chuyên gia lp trình để tr thành
ngôn ng lp trình dành cho nhng d án cloud-centric quan trng nht thế gii.
Tại sao Go được chn bi các nhà phát trin ca nhng d án
như Docker Kubernetes? Đặc điểm ca Go là gì? khác vi các ngôn
ng lp trình khác và phù hp cho loi d án nào nht? Trong bài này, chúng
ta s khám phá những tính neăng của Go, trường hp tối ưu, điểm thiếu sót và
hn chế ca Golang.
Golang là gì? Ti sao chúng ta nên hc Golang?
Go nh gọn và đơn giản
Go hay Golang là sn phẩm được phát trin bi các nhân viên ca Google,
đặc bit là k nổi tiếng ca Google, mt chuyên gia v Unix, ông Rob Pike,
tuy nhưng đó không phi là mt 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 đ hc, d làm vic d dàng đọc bi các nhà phát trin khác.
Và Go không h có mt b tính năng lớn, đặc bit là khi so sánh vi các ngôn
ng như C ++. Ngoài ra Go còn gợi nh đến C bi 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, nhiu
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 dng duy trì các ng
dng cross-platform, thì Go cũng nhiều đim chung vi Java. khi nào
nên dùng golang? Nó như một phương tiện cho phép lp trình mt cách nhanh
chóng th chy bt c nơi nào, thì bạn th ởng tượng Go Python
ging nhau đim này, mc gia chúng nhiều điểm khác biệt hơn là
tương đồng.
Dành cho tt c mi người
Tài liu v Go, mô t Go là “một ngôn ng biên dch 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 dch ch trong ng vài giây. Thêm vào đó, Go còn tránh
đưc những điểm hn chế của C liên quan đến các file thư vin. Nói tóm li,
Go giúp cuc sng ca lp trình viên tr nên d dàng bng nhiu cách:
Tin li:
Go được so sánh vi các scripting language (ngôn ng kch bản) như
Python vi kh năng đáp ng nhiu nhu cu lp trình ph biến. Mt s tính
năng này được tích hp vào trong chính ngôn ng, chng hạn như “goroutines”
mt hàm cho concurrency kiu giống như behavior, ngoài ra các tính năng
b sung được sẵn trong các package thư viện Go chuẩn, như http
package ca Go. Giống như Python, Go cung cấp kh năng quản b nh t
động bao gm vic garbage collection (dn file rác).
Không ging các ngôn ng kch bản như Python, Go biên dịch (compile)
code ra nh phân mt cách nhanh chóng. không giống nC hoc C ++, Go
biên dch cực nhanh, nhanh đến mc khiến bn cm thy khi làm vic vi Go
giống như làm vic vi mt ngôn ng kch bản hơn một ngôn ng biên
dch.
Tốc độ:
Run nh phân chậm hơn so với C, nhưng sự khác bit v tốc độ này không
đáng kể đối vi hu hết các ng dng. Hiu sut ca Go tt ngang vi C trong
phn ln công việc nói chung nhanh hơn so với các ngôn ng khác ni
tiếng v tốc đ (ví d: JavaScript, Python và Ruby).
Linh hot:
Các file executable được to bng toolchain ca Go th hoạt động độc
lp mà không cn external dependencies mặc định. Toolchain h tr cho nhiu
h điu hành, hardware platform (chun phn cng ca máy tính) khác nhau
có th đưc s dụng để biên dịch các chương trình nhị phân qua các nn tng.
Kh năng tương thích:
Go cung cp tt c nhng điều trên mà không b mt quyn truy cp vào
h thống bên ới (underlying system). Phương mm Go có th liên kết với t
vin C bên ngoài hoc thc hin các lnh call h thng native. d trong
Docker, Go interface vi các chức năng Linux low-level, cgroups
namespace (tm dịch: không gian tên), để hoạt động vi container.
H tr:
Toolchain Go sẵn dưới dng binary ca Linux, MacOS hoc Windows
hoặc như là một container trong Docker. Go được đặt mặc đnh trong nhiu bn
phát hành ph biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp
cho vic trin khai Go source tr nên d dàng hơn đối vi các nn tng trên. Go
cũng hỗ tr mnh m cho nhiều development environment (môi trưng phát
trin) ca bên th ba, t Microsoft Visual Studio Code đến Komodo IDE ca
ActiveState.
1.2 Ưu nhược đim ca GOLANG
KHI NÀO NÊN DÙNG GOLANG?
Khi nào nên dùng golang? dùng trong trưng hp nào? Không
ngôn ng nào phù hp vi mi loi công việc, nhưng có một s ngôn ng phù
hp vi nhiu mục đích hơn nhng ngôn ng khác. Mnh m khi phát trin mt
s loi ng dng chính:
Phân phi các network service (dch v mng).
Các chương tnh ứng dng mng (network application) sng hay chết
dựa vào concurrency các tính ng native concurrency ca Go,
các goroutines và các channel, rt phù hp cho các tác v đó. Do đó, có nhiu
d án Go dành cho mng, các chức năng distributed (phân phối) dch 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 trin ca cloud-native.
Các tính năng concurrency và network ca Go và tính linh hot cao ca
làm cho phù hp vi vic xây dng các ng dng cloud-native. Trên thc
tế, Go đã được s dụng để xây dng mt trong nhng nn tng phát trin ng
dng da trên cloud-native, ng dng h thng containerization Docker.
Thay thế cho cơ sở h tng hin có.
Phn ln các phn mm ca chúng tôi ph thuộc vào s h tng
Internet đã lc hu. Vic viết li nhng th như vy bng Go mang li nhiu
lợi ích, như giữ an toàn b nh tốt hơn, trin khai trên nhiu nn tng 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 gi Teleport mt phiên bn mi ca 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 ca h.
GO KHÔNG PHÙ HP VI VIC
Go được thiết kế nh gn d hiu, vy dẫn đến mt s tính năng
nhất định b b qua. Thến mt s tính năng phổ biến có trong các ngôn ng
khác thì li không có trong Go.
Mt trong nhng tính năng Go không generics, kiu biu din
của Types dưới dng tham s khi định nghĩa lớp, hàm và interfaces. Go không
bao gm generics steward ca ngôn ng này ngăn cn vic thêm generics
vào vì cho rằng điều đó sm giảm tính đơn giản. Tuy vn có thm vic tt
với Go, nhưng rất nhiu lp trình viên vn mun thêm generics vào nó.
Nhược điểm khác của Go kích thước của các chương trình. Code được
biên dch kiểu static (tĩnh) theo mặc định. Cách này làm đơn gin hóa qtrình
xây dng triển khai, nhưng dẫn đến vic ch một đoạn code đơn giản “Hello,
world!” lại nặng đến khong 1,5MB trên Windows 64-bit. Nhóm nghiên cu
của Go đang cố gắng để giảm kích thước ca những chương trình này trong
nhng bn phát hành kế tiếp. Có nhng gii pháp cho vic này là nén file hoc
xoá b thông tin v debug ca Go.
Tuy nhiên, mt tính năng khác của Go, qun lý b nh t đng (AMM),
th được xem như một nhược điểm, garbage collection (qtrình thu
gom file rác) đòi hỏi mt s memory nhất định đ x lý. Theo thiết kế, Go
không th qun lý b nh bng tay và vic dn dp file rác Go b ch trích là
không th gii quyết tt các loi memory load (b nh ti) xut hin trong các
ng dng ca doanh nghip.
Xét v mt tích cc, Go 1.8 mang li nhiu ci tiến trong qun lý b nh
và dn dẹp file rác đ giảm đ tr (lag). Tt nhiên, các nhà phát trin Go có th
s dng phân b (allocation) b nh bng tay trong mt extension ca C hoc
bng cách s dụng thư viện qun lý b nh th công ca bên th ba.
Tình hình xung quanh vic xây dng mt GUI (giao diện đồ họa người
dùng) phong phú cho các ng dng ca Go, chng hạn như trong các ứng dng
dành cho desktop, vn còn ri rác.
Hu hết các sn phm t Go là các command-line tool hoc các dch v
network. Mc dù vy, vn có rt nhiu d án đang được thc hiện để mang li
mt GUI phong phú cho các ng dng ca Go. các framework
như GTK GTK3. Mt d án khác nhm cung cp platform-native UI, mc
các giao din này da vào các binding của C và không được viết bng Go.
Ngoài ra, bởi vì Go được thiết kế là nn tảng độc lp, nên không có bt k cái
đưc nêu trên có th tr thành mt phn ca package chun.
Sau cùng, tốc đ run ng dng và trình dn dp file rác cho các ng dng
Go ph thuc vào h điu hành nằm bên dưới. (Các lập trình viên quan tâm đến
mt ngôn ng dành cho loi công vic này có th tìm hiu Rust ca Mozilla.)
1.3 S khác bit ca Go so vi 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 mt cách
hoàn toàn mới để gii quyết vấn đề, đôi khi đ gii quyết mt vấn đề, bn
phi t b nhng gì không hiu qu. Và kết qu là, mọi tính năng chính của Go
hu hết đều bt ngun t nhng hn chế chính, chng hạn như:
Có ch ý đơn giản hóa và cú pháp rõ ràng để d đọc, d hc 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 độ thc thi và xây
dng
mt b thu gom rác, để gii quyết tình trng mt an toàn b nh
nhưng vẫn gi tốc độ thc thi cao hp lý và hiu qu tài nguyên
Thiếu các tính năng phổ biến và syntax sugar đ ti thiu hóa, chính xác
và đơn giản để gii quyết mt vấn đề c th
Không các nguyên tắc hướng đối tượng ph biến như kế tha, các lp
giao diện thông thường, điều này ngày càng tr n thường xuyên hơn k t
s gia tăng của các ngôn ng ng chức năng, mặc dù Go cũng một phn nào
là ngôn ng đa mô hình.
Vendoring (được thay thế bng Mô-đun Go kể t 1.11), mt h thng
qun lý ph thuc mnh và trình hp dch ca cc k gn vi mã nh phân
để đạt được các bn dng siêu nhanh, nh và hiu quả. Điều đó làm cho nó trở
thành mt s kết hp hoàn ho cho hình kiến trúc microservice cho s
phát trin trên nn tảng đám mây nói chung.
Không có x ngoi l try-catch mc dù b tranh cãi và b ch trích rt
nhiu
Như đã thấy, các nhà phát trin của Go đã cố gắng đưa ra một h thng
ràng buc da trên ngôn ng rt hiu qu để đạt được mt s đặc điểm và tính
năng xịn xò nht ca nó. Bng cách s dng các ràng buộc đơn lẻ để đạt được
đồng thi không ch mt mà là nhiều tính năng chính cùng mt lúc.
Ngoài ra, ti thời điểm này, ràng Go không ging như các ngôn ngữ
khác được phát trin ph biến bằng cách thêm các tính năng mới, sau đó mi
tăng độ phc tp ri hi t Go đã tiếp cận theo cách đ khc phc các hn
chế ngay t đầu.
“Nhiều người mi s dng Go cn những tính năng các ngôn ng
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 tốt hơn chỉ khiến nó nng n hơn. ”. - Rob
Pike, người tạo ra Golang đã nói.
c tính năng riêng bit
Tuy nhiên, điều đó không có nghĩa là Go b thiếu hoc thiếu mt s tính
năng quan trọng. Tuy nhiên,để đơn giản, Go đã cân nhắc v vic 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 đề.
Mt s điều “đơn gin” trong Go:
Trên thc tế, b thu gom rác (Gabage Collectors) là tính năng đơn giản
nht ca Go, không bt k giao diện điều khiển nào. Tuy nhiên, đơn
gin nhất cũng là phức tp nht nó quản để cung cp s an toàn cho b
nh trong khi tiết kim tốc độ thi gian chy cc cao và cung cp hiu qu tài
nguyên đáng ngạc nhiên.
Concurrency hay còn gi là Goroutines - tính năng chủ lc ca ngôn
ng lp tnh Go để tn dụng ng lực x ca CPU. tờng được biết đến
cách trin khai d dàng và đơn gin nht ca concurrency model cho đến
nay. Trên thc tế, quá trình to ra mt quy trình con mới đơn giản gần như
không làm gì c. Tt c nhng gì bn cn làm ch là gõ Go.
Interfaces (các giao din) là mt trong những đặc điểm khác bit và d
nhn biết nht ca Golang. Gii pháp thiết kế độc đáo của h t gii quyết hu
hết các ch trích ca OOP, cho phép tính trc giao và các kiến trúc thành phn.
Packages hoạt động trơn tru. Bằng cách s dng công c go get, bn có
th làm điều đó bt c đâu: Gopkg, GitHub, GitLab, BitBucket, thm chí c
nguồn kho lưu trữ được lưu trữ ca riêng bn t khi "vanity” được biết đến.
Tuy nhiên cũng khá phức tạp để cho phép thành phn hóa, mô-đun, khả năng
m rng, chia s, n d liu và cô lp, v.v.
Thư vin chun ca Go cha rt nhiều tính năng tin dng tuyt vi
chng t rng Golang trên thc tế mt ngôn ng khá giàu tính năng. Tuy
nhiên, cách chúng được thc hin là một điều gì đó khiến nó tr nên độc đáo.
Reflection - Đặc bit, ngôn ng này không đơn giản để s dụng n
nhng ngôn ng khác. Mc dù vy, Go vn c gng tn dng relfection tối đa
trong khi vn gi cho nó tương đối d s dng.
CHƯƠNG 2 TÌM HIU V NG DNG GOLANG
2.1 V trí ca GoLang trong quá trình phát trin Website
Lp trình backend vi Golang
Golang là mt ngôn ng lập trình đưc phát trin bi Google, Go mang
đến hiu sut tt pháp tinh gn d dàng hc và làm quen. Da trên Golang
chúng ta có th xây dng h thng backend mt cách thun tin, nhanh chóng
và hiu qu.
Hiện Golang được s dng rt rng rãi trong phát trin backend cho
website vi các li ích chính sau đây:
Công ngh mnh m và d m rng cho phát trin ng dng web
Xây dng microservices, kim soát luồng điều khiển đơn giản và nhanh
chóng
X lý d liu mnh m vi nhiều thư viện có sn
Cộng đồng người làm lp trình Golang nhiu và nhit tình h tr người
hc và làm vic vi Golang
Lp trình web backend với Golang đang một trong các công đưc
tuyn dng nhiu nht trên th trường vic làm vi mức lương hàng tháng
th lên đến 50-60 triệu đồng tùy vào kh năng, kinh nghiệm v trí công vic.
Ngưi lp trình backend vi Golang th xin vic ti các công ty
tập đoàn lớn như FPT, Viettel, các công ty phần mm thuc Hip hi phn mm
VINASA, hay các công ty phn mm thuc Hip hi xut khu phn mm
VNITO.
2.2 Tình hình phát trin GoLang
Với đặc điểm ca mình, Golang có th ng dng trong nhiều lĩnh vc,
như trong phát trin Web Backend, phát trin ng dng mobile (vi vai trò
server), trong các h thng microservice hay ERP (Enterprise - Resource -
Planning).
Có th nói, Golang đang phát triển rt nhanh, tốc độ ngày một tăng cao,
tiếp cn d dàng, các phương thc bo mật được ci thin mnh m giúp
ngày càng trn chiếm ưu thế hơn.
Đâu là con đường phát trin tương lai ca Go?
Go th đang một “ngã ba đường”. Giai đoạn phát trin tiếp theo ca
Go có th được thúc đy bi nhu cu phát triển cơ bản ca nó, Go cn chú ý v
việc thay đổi ngôn ng để th đáp ng tốt hơn, ch phi c cứng đầu
không thay đi. Nói cách khác, Go hoàn toàn th thêm các tính năng mà ban
đầu nó không có, giống như generics.
Các lp trình viên s dng Golang ràng mun những điều này. Mt
cuc kho 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, generic mt trong những thay đi mang tính ci
thin nht, tiếp theo dependency và package management. Những thay đổi
này th giúp Go đạt mt v trí cao trong gii lập trình nơi Java, JavaScript
và Python hiện đang thng tr .
Ngay c khi không có bt k s thay đổi ln nào đối vi Go, thì tôi luôn
mong được thy Go s dng cho vic xây dng lại cơ s h tng và tr thành
mt phn ca d án s dng multi-language a ngôn ngữ). Mt d án s
dng Go trong mt phn ca vic lp trình h thống đó Ethos, một h điu
hành như một phn mm bo mt chất lượng cao. Kernel đưc viết bng C,
nhưng userspace của ng dụng được viết bằng Go, đây là một cách thông minh
để tn dng nhng phù hp vi C, trong khi vn th tn dng các thế
mnh ca Go.
Vic trin khai ca bên th ba đi vi công c Go cũng đang lan rộng.
ActiveGo ca ActiveState cung cp mt phiên bản được h tr v mặt thương
mi ca Golang c LLVM cùng các d án gccgo được trin khai open source
ca Go bng toolchain.
Mt cách khác Go th phát trin tn tại như mt nn tảng để
phát trin các ngôn ng hoàn toàn mi khác. Mt ví d là ngôn ng Have. S
dng nhiều ý tưởng t Go và transpile vào Go để d thc hiện, nhưng tinh gọn
cú pháp ca Go và hin thc hoá mt s các concept tương tự nhng theo cách
riêng. Mt d án khác có tên Oden, tiếc là không còn được phát trin, s dng
assembler toolchain của Go để biên dch mt ngôn ng mới được thiết kế
da trên cm hng t các ngôn ng khác như Lisp và Haskell.
Tương lai của Golang ch mi bắt đầu gi bạn đã biết khi nào nên dùng
golang. Nhưng chắc chn nó s đưc s dụng trong cloud, nơi tốc đ và s
đơn giản ca giúp d dàng xây dng một sở h tng th m rng, có
th đưc duy trì trong thi gian dài.
2.3 Các ng dng ca Golang
Phân phi các dch v mng: Các chương trình ng dng mng tn
tai được hay không là ph thuộc hoàn toàn vào các tính năng native concurrency
native concurrency ca golang. vy Golang rt nhiu d án cho
nhà mng vi các chức năng phân phối dch v đám mây như API, web
server và minimal frameworks.
Xây dng phát trin các cloud-native: Golang các tính năng là
network concurrency vi tính linh hot cao khiến phù hp vi vic xây
dng và phát trin các ng dng cloud-native. Trên thc tế, golang đã được áp
dng trong vic thiết lp mt trong nhng nn tng bng cách ng dng h
thng containerization Docker và da trên cloud-native.
Thay thế cơ sở h tng: S tht là phn ln các phn mềm đều ph thuc
vào những s h tầng internet đã trở nên li thi, lc hu. vy, khi viết
li thay thế sở h tng bng golang thì các nn tng s đưc trin khai
nhiều hơn, bộ nh đưc gi an toàn tốt hơn, mang lại nhiu lợi ích hơn
mt codebase sạch để h tr bo trì.
PHN II. THC NGHIM
CHƯƠNG 1 XÁC ĐỊNH ĐỐI TƯỢNG HC
1.1 Đối tượng hc Giáo trình GoLang Basic
- Hc viên mong mun được tìm hiu v cu trúc, cú pháp ca ngôn
ng lp trình Golang.
- Hc viên mun bt đu hc các kiến thc cơ bản v lp trình, lp
trình Web BackEnd, to API trên Web.
- Hc viên mun viết mt Project nh bng ngôn ng Golang.
- Hc viên mun s dng ngôn ng Golang để tiếp cn cơ sở h tng
v máy ch đám mây ln bng.
- Hc viên mong mun xây dng các chương trình network
application bng Golang.
- Hc viên mun tìm hiu thêm các ngôn ng mi ngoài các ngôn
ng đã hc.
1.2 Yêu cu ti thiu đối vi hc viên trước khi bt đầu khóa hc
+ V phn chun b công c lp trình:
- 01 máy tính kết ni Internet, chy trên h điu hành Ubuntu hoc
Windowns 10.
+ V kiến thc lp trình: Không có.
1.3 Kĩ năng Học viên s đạt được sau khi tham gia khóa hc
- Cài đặt được ngôn ng Golang phù hp vi Máy tính ca Hc viên.
- Nh, hiu và viết được các chương trình Golang đúng cú pháp.
- Biết cách khai báo biến, hng s trong Golang.
- Nm được các kiu d liu, mt s cu trúc d liu trong Golang.
- Nm được các cu tc điu khin trong Golang: Cu trúc r nhánh
(If Else), cu trúc lp.
- Lp trình đa luồng vi Golang s dng Goroutines, giao tiếp gia
các lung qua Channels.
- To được API bng Golang.
- Kết ni Golang vi Database.
- [Tùy chn] To được module trong Golang.
- [Tùy chn] X lý các li response trong Golang.
1.4 Thời gian để Hc viên hoàn thành khóa hc
- Syntax Golang: 2 gi 20 phút
- Restful API with go: 1 gi 40 phút
- Todo List: Tng thi gian: 1 gi 11 phút
Tng thi gian: 5h 10 phút.
CHƯƠNG 2. XÂY DỰNG GIÁO TRÌNH GOLANG BASIC
2.1 Mc tiêu xây dng Giáo trình Golang Basic
- Hc viên hiu biết v khái nim, lch s hình thành, các ưu nhược đim
ca Golang.
- Giúp cho hc viên có hiu biết cơ bản v cú pháp, cu trúc chương trình
ngôn ng Golang.
- Hc viên có th t to Web API bng Golang.
- Hc viên có th t to mt Project nh bng Golang.
2.2 Gii thiu chung v Giáo trình GoLang Basic
- Gm 4 phn chính:
+ Gii thiu chung v ngôn ng Golang và khóa hc Golang Basic.
+ Gii thiu v cú pháp, cu trúc chương trình ca Golang.
+ Gii thiu v các to Web API bng Golang.
+ Gii thiu v cách to Project nh bng API.
2.3 y dng các thành phn chính ca khóa hc GoLang Basic
Golang Syntax
Introduction- Setting Up a
Development Environment
+ Hướng dẫn cài đặt go trong
Windows và Ubuntu
Variables
+ Hc v các kiu variables có trong
Golang
+ Gii thiu qua v các kiu d liu
trong GoLang
+ Hii thiu v các primitives trong
golang
+ Hướng dn cách khai báo biến
+ Hướng dn chạy chương trình
trong golang
+ Bài tp:
- Bài tp nhn biết kiu
- Bài tp code một chương trình
tính toán cơ bản
+ Naming convention trong golang
Constants
+ Cách khai báo hng s
+ Lưu ý về cách làm vic vi các
hng s khác kiu
Arrays and Slices
Hc v mng trong Golang:
- Khai báo
- Truy cp vào phn t mng
- Độ dài mng
- Vòng lp mng
- Mảng đa chiu
Hc v kiu d liu slices
- To 1 slices
- Độ dài và sc cha slices
- Thêm phn t vào slices
- Truyn 1 slices vào function
- Slices đa chiu
Maps and Structs
Hc v maps:
- Khai báo
- Làm vic vi mng
- Truyn maps gia các hàm
Hc v Structs:
- Định nghĩa
- Khi to biến struct
- Truy xuất đến các trưng
trong struct
If and Switch Statements
Hc v các kiu r nhánh trong
Golang:
+ If
+ If Else
+ If Else If Else
+ Switch
ng dng bài tp
Looping
Hc v cú pháp lp trong Golang:
+ Lp c định
+ Lp vô hn
+ Lp qua tng phn t
ng dng bài tp
Defer, Panic, and Recover
Gii thiu v 3 cơ chế: defer, panic
và recover.
Pointers
Hc v cách khai báo và s dng
con tr
Functions
Hc v cú pháp và cách xây dng
hàm trong Golang:
+ Cú pháp hàm
+ Tham s
+ Kiu tr v
Interfaces
Goroutines
Hc v cách s dụng goroutine để
x lý đồng thi nhiu tác v
Channels
Hc cách giao tiếp b nh gia các
goroutines thông qua channel, cách
khai báo channel và s dng select
Kim tra Syntax
Kim tra li v các kiến thức cơ bản
đã được hc Syntax Golang.
Câu hỏi dưới dng điu vào ch
trng và mc độ d, ch yếu giúp
ngưi hc h thng li kiến thc
Restful API with go
Restful API là
Gii thiu API là ?
Tạo API đầu tiên
To API ly d liêu mu
Post API
Thêm mt d liu mi vi POST
Get API vi Id
Ly mt bn ghi ch định
Kết ni database
Kết ni cơ s d liu mysql
Ly tt c bn ghi t database
Ly tt c d liu t database vi
API có sn.
Thêm bn ghi vào database
Thêm mt bn ghi thông qua API
Ly mt bn ghi t database
Ly mt bn ghi thông qua API
[Tùy chn] Module
Gii thiu v module trong Go
[Tùy chn] X lý li trong Golang
Cách x lí li trong Go
Todo List Project
Review Project
Video gii thiu kết qu sau khi
hoàn thành.
Gii thiu cu trúc project
Video gii thiu v cu trúc thư mục
và các file trong project.
Link git cha mã ngun frontend và
code golang qua tng bài.
Gii thiu các endpoint troing
project
Video gii thiu các api s làm.
Xây dng cu trúc project
Video khi to project theo cu trúc
đã giới thiu.
API đọc toàn b d liu
Video xây dựng api đọc toàn b d
liu.
API thêm d liu
Video xây dng api thêm d liu.
API cp nht d liu
Video xây dng api cp nht d liu.
API xóa d liu da theo id
Video xây dng api xóa d liu da
theo id.
API xóa toàn b d liu
Video xây dng api xóa toàn b d
liu.
Fixbug và hoàn thành
Video ng dn x lý CORS và
hoàn thành khóa.
CHƯƠNG 3 KẾT QU VÀ KT LUN
3.1 Kết qu
- Kết qu Golang Syntax
- Kết qu restful API
| 1/289

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