TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO THỰC TẬP LẬP TRÌNH BACKEND VỚI GOLANG Công ty thực tập Công ty TNHH Finan Người phụ trách Anh Nguyễn Minh Hiếu Thực tập sinh Phan Ngọ[.]
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
LẬP TRÌNH BACKEND VỚI GOLANG
Công ty thực tập: Công ty TNHH Finan Người phụ trách: Anh Nguyễn Minh Hiếu Thực tập sinh: Phan Ngọc Quang
Trang 2LỜI MỞ ĐẦU
Ngày nay, ngành công nghiệp phần mềm đã và đang là một trong những ngành nghề có sức phát triển vô cùng mạnh mẽ, chiếm tỉ trọng lớn trong nền kinh tế toàn cầu và không hề có đấu hiệu chậm lại Nhu cầu thị trường cho một sản phẩm phần mềm hiện nay là cao hơn bao giờ hết Đứng trước đà phát triển này, cùng với nhu cầu vô cùng lớn, đã có nhiều công ty ra đời nhằm đáp ứng thị trường
Một trong những công ty đó là Finan Đây là một công ty start up với mục đích là giúp các tiểu thương vừa và nhỏ có thể kinh doanh một cách hiệu quả
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũng như muốn được tham gia làm việc trong một môi trường chuyên nghiệp, em có dự định là sẽ thực tập trong kỳ hè này Sau khi đi phỏng vấn ở nhiều công ty thì em quyết định chọn công ty Finan
- một môi trường lý tưởng, hiện đại, chuyên nghiệp - là nơi sẽ giúp em thực hiện được dự định này
Trang 3LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty Finan đã tạo điều kiện cho em có cơ hội được thực tập tại công ty
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của các anh chị trong nhóm trainer, nhóm thực tập chúng em đã tiếp thu được những kiến thức quan trọng để có thể xây dựng những tính năng cho ứng dụng thực tế Chân thành cảm ơn các anh chị trong nhóm trainer đã bỏ ra nhiều thời gian,công sức để hướng dẫn chúng em hoàn thành đợt thực tập này
Đặc biệt cảm ơn anh Nguyễn Minh Hiếu đã training Golang, hướng dẫn, giúp đỡ cho
chúng em tận tình cả những khó khăn trong công việc, đến những khó khăn việc làm quen với môi trường mới, ngoài ra anh còn giúp chúng em hiểu công dụng, cách hoạt động của các công nghệ đang được sử dụng trong ứng dụng của công ty; cảm ơn anh Lê Bá Sáng, đã giúp đỡ, hỗ trợ chúng em rất nhiều về các vấn đề truy vấn SQL, giúp em có thể cải thiện được kỹ năng cũng như mức hiệu quả của những câu truy vấn, ngoài ra anh còn hỗ trợ chúng em trong việc hiểu rõ nghiệp vụ cũ cũng như là định hướng hướng đi tối ưu nhất, hiệu quả nhất;
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Phan Ngọc Quang TP.HCM, ngày 10 tháng 12 năm 2022
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
MỤC LỤC
Chương 1: Giới thiêu công ty thực tập 1
1 Giới thiệu công ty Finan 1
2 Sản phẩm của công ty 1
Chương 2: Nội dung thực tập 3
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 3
2 Nghiên cứu kỹ thuật 3
2.1 Các công cụ làm việc 3
2.2 Tìm hiểu ngôn ngữ Go 4
2.3 Tìm hiểu ngôn ngữ Go nâng cao 4
3 Thực hiện project 6
4 Lịch làm việc 7
Chương 3: Chi tiết về project 9
1 Tổng quan 9
2 Lộ trình 9
2.1 Tìm hiểu nghiệp vụ và fix bug đơn giản 9
2.2 Tính năng báo cáo với sản phẩm bán kèm 9
2.3 Tính năng hoàn trả đơn hang (làm cùng 1 anh trong team) 10
2.4 Convert API từ service cũ 10
2.5 Cải tiến lại tính năng sổ nợ, thu chi 11
2.6 Nâng cấp danh mục của kho 11
2.7 Tính năng báo cáo dành cho web 11
Trang 6Chương 1: Giới thiêu công ty thực tập
1 Giới thiệu công ty Finan
Finan là một công ty khởi nghiệp công nghệ có trụ sở tại Singapore tập trung vào việc cung cấp cho các doanh nghiệp nhỏ và vi mô phát triển mạnh về các công nghệ kỹ thuật số và tạo ra tác động bền vững cho cộng đồng.
Công ty Finan đã tạo ra các ứng dụng Sobanhang để giúp các doanh nghiệp nhỏ và vi mô
xây dựng các cửa hàng trực tuyến, bán cho nhiều khách hàng hơn và quản lý dòng tiền dễ dàng trên điện thoại thông minh.
Công ty được thành lập bởi các giám đốc điều hành hàng đầu có kinh nghiệm từ các công ty khởi nghiệp hàng đầu thị trường bao gồm Lazada, Topica, Onemountgroup, Datamart
và được hỗ trợ bởi các nhà đầu tư hàng đầu, công ty mong muốn cung cấp cho 1 triệu doanh nghiệp phục vụ thị trường 100 triệu khách hàng và tạo ra doanh thu 100 tỷ USD vào năm 2025.
2 Sản phẩm của công ty
Sổ Bán Hàng được biết đến là một ứng dụng quản lý bán hàng hiệu quả Ứng dụng hiện đang được hơn 300,000 nhà bán hàng tin dùng tại Việt Nam Được ra mắt vào thời kỳ đỉnh điểm của dịch Covid-19, Sổ Bán Hàng cung cấp giải pháp giúp bán hàng online, quản lý bán hàng toàn diện chỉ trên một ứng dụng di động Ứng dụng còn giúp các chủ cửa hàng thúc đẩy hoạt động kinh doanh và gia tăng doanh thu bán hàng.
Hơn một năm ra mắt, Sổ Bán Hàng trở thành ứng dụng quản lý bán hàng phổ biến nhất Việt Nam, với hơn 35,000 người dùng mới mỗi tháng.
- Cung cấp website bán hàng miễn phí
Trang 7Không cần bỏ ra chi phí đắt đỏ, không cần mua hay mất phí duy trì tên miền, có ngay website online chuyên nghiệp, dễ dàng cài đặt trong 2 phút, giúp tiếp cận thêm x5 lần khách hàng Người bán hàng có thể tạo ngay cửa hàng online trên ứng dụng Hoàn toàn chủ động giới thiệu cửa hàng của mình, tạo các chương trình khuyến mại cho khách hàng thân thiết qua SMS, Zalo, tin nhắn Facebook
- Quản lý tất cả trên điện thoại, không cần đầu tư thiết bị.
Hoạt động như một máy bán hàng POS ngay trên điện thoại, Sổ Bán Hàng giúp các chủ cửa hàng dễ dàng tạo và in hoá đơn bán lẻ với thiết bị không dây, quản lý sổ sách thu chi, quản
lý đơn hàng, khách hàng, hàng tồn kho, in hoá đơn, xem báo cáo thu chi, lãi lỗ thông minh trong lòng bàn tay.
- Bán hàng dễ - Tiền về nhanh - Không lo thiếu vốn
Nhận thanh toán thẻ, chuyển khoản, thu COD, VietQR Pro, tiền về tài khoản ngay lập tức tăng tỷ lệ chốt đơn lên trên 50% trong thời đại mới Dễ dàng ghi lại các khoản thu chi Ngoài ra, người bán hàng có thể xem được lãi lỗ hàng ngày, tháng không lo thất thoát.
- Tích hợp bán hàng đa kênh và giao vận với đơn giá cực ưu đãi.
Hỗ trợ bán hàng đa nền tảng như Shopee, Meta, Shop cần giao hàng? Sổ Bán Hàng có ngay tích hợp đơn vị vận chuyển cùng bảng giá ưu đãi và nhiều chương trình hấp dẫn.
- Dịch vụ tài chính:
Tiếp cận các dịch vụ tài chính một cách đơn giản và dễ dàng nhất từ các đối tác chiến lược HDBank, UOB
Sổ Bán Hàng vinh dự nhận được hàng loạt giải thưởng lớn và nằm trong Top 10 startup
từ các tổ chức hàng đầu thế giới như Google, SKSF, Techfest, Và trở thành đối tác chiến lược của các tổ chức tài chính hàng đầu như: MasterCard, MBB, HDBank, UOB
Trang 8Chương 2: Nội dung thực tập
Đợt thực tập với chủ đề “Lập trình Backend với Golang” nhằm mục đích giúp sinh viên thực tập được đào tạo toàn diện về lập trình Golang, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm, thuyết trình, giao tiếp, quy trình làm việc thực tế Tại công ty, sinh viên có
cơ hội được học tập, khám phá và làm việc trong một môi trường chuyên nghiệp
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian: 1 ngày
Nội dung: Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên (như
đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc, giới thiệu các phần mềm hỗ trợ làm việc, …
Kết quả:
Hiểu thêm về công ty SoBanHang, quá trình thành lập và phát triển Có thêm các kỹ năng về việc làm việc nhóm với quy mô lớn, làm việc có kế hoạch, có kỷ luật, có trách nhiệm hơn
2 Nghiên cứu kỹ thuật
2.1 Các công cụ làm việc
Thời gian: 0.5 ngày
Nội dung: Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc.
Trong thời gian này, supervisor đã hướng dẫn thực tập sinh tìm hiểu về các công
cụ sẽ giúp ích cho trong công việc sau này Một số phần mềm trong số đó như Lark- sử dụng trong hầu hết tất cả hoạt động của công việc như: trao đổi thông tin, đọc/viết document, điểm danh, …; DBeaver – sử dụng để thao tác với cơ sở dữ liệu;
Thực hiện:
Thực hành sử dụng các phần mềm đã nêu trên
Trang 9Kết quả:
Lập trình sử dụng các công cụ miễn phí, giúp dễ dàng kết hợp các công cụ với nhau
2.2 Tìm hiểu ngôn ngữ Go
Thời gian: 7 ngày
Nội dung: Tìm hiểu Go cơ bản, và hiểu được cú pháp của ngôn ngữ Go
- Các syntax, concept về kiểu dữ liệu, câu lệnh điều khiển (if else, for, while,…), slice, map, struct, interface, hàm.
- Các kiến thức về error handling, compiling, module,…
- Gorountine, concurrency trong Go.
- Làm quen, phát triển ứng dụng RESTful web service API với Go và Gin web framework.
- Đọc hiểu template source code của công ty
Thực hiện:
- Tự tìm hiểu và trao đổi với thành viên trong team thực tập và người phụ trách
- Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả:
- Nắm được các cú pháp của ngôn ngữ Go
- Vận dụng vào các bài toán
- Hiểu được template của công ty
- Ngoài ra còn biết được cái quy tắc viết code của công ty
2.3 Tìm hiểu ngôn ngữ Go nâng cao
Thời gian: 15 ngày
Nội dung:
Tìm hiểu công nghệ được sử dụng trong hệ thống kết hợp với Go và thực hành demo
- Docker
Docker là một nền tảng cho developers và sysadmin để develop, deploy và run application với container Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển ứng dụng và môi trường này được gọi là container Khi cần deploy lên
Trang 10bất kỳ server nào chỉ cần run container của Docker thì application của bạn sẽ được khởi chạy ngay lập tức
- Swagger
Swagger là một bộ công cụ mã nguồn mở để xây dựng OpenAPI specifications giúp chúng ta có thể thiết kế, xây dựng tài liệu và sử dụng REST APIs.
Swagger cung cấp 3 tools chính:
Swagger-Editor: dùng để design lên các APIs hoàn toàn mới hoặc edit lại các APIs có sẵn thông qua 1 file config.
Swagger-Codegen: dùng để generate ra code từ các file config có sẵn
Swagger-UI: dùng để generate ra file HTML, CSS,… từ 1 file config
- PostgreSQL
PostgreSQL được phát triển bởi PostgreSQL Global Development Group, 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 mở miễn phí bởi vậy PostgreSQL có thể được dùng, sửa đổi và phổ biến bởi bất kỳ ai cho bất kỳ mục đích nào.
PostgreSQL có tính ổn định cao PostgreSQL là hệ thống quản lý cơ sở dữ liệu đầu tiên triển khai tính năng kiểm soát đồng thời nhiều phiên bản (MVCC).
Một số các tính năng nổi bật:
Câu truy vấn phức hợp (complex query)
Các kiểu dữ liệu: nguyên hàm (số nguyên, số, chuỗi, boolean), cấu trúc (Date/Time, Array, UUID), document (JSON/JSONB, XML, Key-value),…
Toàn vẹn dữ liệu: UNIQUE, NOT NULL, Primary Keys, Foreign Keys, Ràng buộc loại trừ, Indexing,…
Chức năng bảo mật: hỗ trợ xây dựng hàng rào bảo mật, xác thực mạnh.
Khả năng mở rộng: thực hiện mở rộng hệ thống qua các phức thức lưu trữ, kết nối
cơ sở dữ liệu.
Chức năng tìm kiếm văn bản: tìm kiếm văn bản đầy đủ, hệ thống hóa ký tự theo cách khoa học.
- Caching với Redis
Trang 11Redis là cơ sở dữ liệu mang phong cách NoSQL, lưu trữ dữ liệu với dạng KEY-VALUE với nhiều tính năng được sử dụng rộng rãi Nó có thể hỗ trợ nhiều kiểu dữ liệu như: strings, hashes, lists, sets, sorted Đồng thời có thể cho phép scripting bằng ngôn ngữ Lua.
- Elasticsearch và Kibana
Elasticsearch là một search engine, được kế thừa từ Lucene Apache, thực chất hoặt động như 1 web server, có khả năng tìm kiếm nhanh chóng (near realtime) thông qua giao thức RESTful Elasticsearch có khả năng phân tích và thống kê dữ liệu.
Elasticsearch là 1 hệ thống phân tán và có khả năng mở rộng tuyệt vời (horizontal scalability) Lắp thêm node cho nó là nó tự động auto mở rộng cho bạn Elasticsearch là
1 open source được phát triển bằng Java.
Kibana là một nền tảng phân tích hiển thị dữ liệu từ Elasticsearch một cách trực quan
dễ sử dụng,Kibana cũng là một công cụ mã nguồn mở miễn phí, cho tất cả mọi người sử dụng Kibana cung cấp các tính năng cho người dùng quản lý như biểu đồ cột, biểu đồ đường, biểu đồ tròn, biểu đồ nhiệt và nhiều loại chart khác nữa.
- Message queue
Message queue là hàng đợi chứa message, cho phép các thành phần/service trong một
hệ thống (hoặc nhiều hệ thống), trao đổi thông tin cho nhau Message queue giao tiếp không đồng bộ, xử lý tuần tự theo cơ chế FIFO - First In First Out
Thực hiện :
- Tự tìm hiểu và trao đổi với thành viên trong team thực tập và người phụ trách
- Hoàn thành các demo sử dụng được các công nghệ trên theo yêu cầu
Kết quả :
- Hiểu được lý thuyết của các công nghệ và biết được nó áp dụng ở đâu khi nào
- Biết cách thực thi các công nghệ trong một project cụ thể
3 Thực hiện project
Sau một tháng được training và thực hành, thực tập sinh đã nắm được những kiến thực
cơ bản về Go, cũng như là các công nghệ áp dụng trong hệ thống của công ty, và hiểu được cơ
Trang 12SoBanHang (ứng dụng đã được giới thiệu ở trên) Chi tiết nội dụng em làm sẽ được nói ở phần sau
4 Lịch làm việc
hoàn thành
1 - 2
Tìm hiểu về công ty, cách tổ chức của công ty
Làm quen với các công cụ làm việc trong công ty
Học cách trao đổi, làm việc giữa các team
Tìm hiểu và thực hành trên ngôn ngữ Go
Anh Nguyễn Minh Hiếu 100%
2- 4
Tìm hiểu về các công nghệ và kỹ thuật công ty đang áp dụng vào dự án
Áp dụng để làm demo cho từng công nghệ
Anh Nguyễn Minh Hiếu
100%
5
Bắt đầu tìm hiểu nghiệp vụ của ứng dụng SoBanHang
Fix những lỗi nhỏ để quen với cách làm việc trong dự án thực tế
Anh Nguyễn Minh Hiếu 100%
6 Làm tính năng báo cáo với sản
phẩm bán kèm
Anh Nguyễn Minh Hiếu, anh Lê Bá Sáng 100%
7 Làm tính năng hoàn trả đơn hàng
cùng với anh Vũ Công Thành
Anh Nguyễn Minh Hiếu, anh Vũ Công Thành 100%
8 Convert API từ service cũ sang
service mới (dùng thư viện mới) Anh Lê Bá Sáng 100%
Trang 139 Cải tiến lại tính năng sổ nợ, thu chi Anh Nguyễn Minh Hiếu,
anh Lê Bá Sáng 100%
10 Nâng cấp danh mục của kho Anh Lê Bá Sáng 100% 11-12 Tính năng báo cáo dành cho web Anh Lê Bá Sáng 100%
Trang 14Chương 3: Chi tiết về project
1 Tổng quan
Sau 1 tháng tìm hiểu ngôn ngữ Go, văn hóa, cách làm việc của công ty thì chúng em được anh Nguyễn Minh Hiếu tạo điều kiện để tham gia phát triển sản phẩm của công ty (SoBanHang) Vì vấn đề bảo mật của công ty nên các thông tin chi tiết về dự án em không chỉ
ra ở đây
2 Lộ trình
2.1 Tìm hiểu nghiệp vụ và fix bug đơn giản
Thời gian: 1 tuần
Nội dung:
- Tìm hiểu những nghiệp vụ cơ bản của ứng dụng bao gồm: đơn hàng, người dung,
sổ nợ, cửa hàng,
- Tìm hiểu database: nhiệm vụ và chi tiết mỗi bảng
- Fix những bugs đơn giản để làm quen với hệ thống
Thực hiện:
- Đọc tài liệu kết hợp hỏi các anh trong công ty
- Đọc source code và fix bug
Kết quả:
- Hiểu được nghiệp vụ cơ bản và cách hoạt động trong hệ thống
- Làm quen với quy trình làm việc trong một dự án thực tế
2.2 Tính năng báo cáo với sản phẩm bán kèm
Thời gian: 1 tuần
Nội dung: Khi có sản phẩm bán kèm thì các con số như doanh thu, lợi nhuận sẽ bị ảnh
hưởng và danh sách sản phẩm (có bao gồm sản phẩm bán kèm)
- Viết API trả ra danh sách sản phẩm có bao gồm sản phẩm bán kèm
- Sửa API cũ khi có sản phẩm bán kèm
Thực hiện:
Trang 15- Tìm hiểu SQL nâng cao, cách làm sao cho câu query tối ưu nhất
- Viết truy vấn cho những API báo cáo
- Viết API hoàn chỉnh
Kết quả:
- Hoàn thành những API đó và được đưa lên cho người đùng sử dụng
- Nâng cao khả năng viết truy vấn
2.3 Tính năng hoàn trả đơn hang (làm cùng 1 anh trong team)
Thời gian: 1 tuần
Nội dung:
- Đọc hiểu nghiệp vụ của tính năng
- Viết API phần báo cáo, và chỉnh sửa những API cũ liên quan đến nghiệp vụ trả hàng
Thực hiện:
- Trao đổi với các bên liên quan và người phụ trách để đưa ra phương án giải quyết
- Đọc code cũ và tiến hành chỉnh sửa
Kết quả:
- Hoàn thành chỉnh sửa các API được giao
- Học đọc cách đọc hiểu code của người khác và cải tiến code
2.4 Convert API từ service cũ
Thời gian: 1 tuần
Nội dung:
- Thực hiện convert lại những api cũ (dùn gokit) ở service cũ sang service mới (dung gorm)
Thực hiện:
- Đọc code cũ và tìm hiểu nghiệp vụ
- Tiến hành convert
Kết quả:
- Hiểu thêm những nghiệp vụ của sản phẩm