Golang, hay còn gọi là Go, là một ngôn ngữ lập trình đơn giản, nhanh chóng và hỗ trợ đa luồng. Hiện tại, Golang đang ngày càng phổ biến, và càng nhiều dự án viết backend bằng Go. Nếu bạn muốn học Golang nhanh nhưng chưa tìm được nguồn tài liệu thì bài viết này dành cho bạn. Dù chỉ mang tính chất giới thiệu, nhưng bài viết bao gồm tất cả các kiến thức cơ bản mà bạn cần để bắt đầu viết Go, với giả định bạn đã có kinh nghiệm lập trình cơ bản.

Đọc bài viết để nắm rõ:

  • Golang là gì?
  • Từng bước học Go
  • Các nguồn học Golang miễn phí và có phí

Golang là gì?

Golang là một ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google. Được thiết kế là một ngôn ngữ tối giản, hiệu quả và đáng tin cậy, Golang đã trở nên phổ biến với khả năng xử lý các thách thức của điện toán hiện đại.

Golang kết hợp lợi ích về hiệu suất, tính an toàn của C và C++ với cú pháp dễ đọc, tinh gọn của các ngôn ngữ như Python và JavaScript.

Đọc thêm: C++ là gì: Tổng quan về C++ và Những câu hỏi C++ thường gặp

Với những đặc điểm đó, Golang đang ngày càng trở thành sự lựa chọn phổ biến, đặc biệt để viết back end cho nhiều dự án. Ví dụ: tất cả các dự án Native Cloud và một số dự án Blockchain đều viết bằng Go như Kubernetes, Prometheus và Docker,…

Các tính năng chính của Golang

Golang nổi tiếng với sự đơn giản và tốc độ, làm cho nó trở thành ngôn ngữ được ưa chuộng cho lập trình hệ thống và mạng, dịch vụ đám mây, và hơn thế. Các tính năng chính bao gồm:

  • Mô hình đồng thời (concurrency model) hiệu quả
  • Thu gom rác (garbage collection)
  • Biên dịch nhanh
  • Thư viện chuẩn mạnh mẽ

9 bước học Golang cơ bản

Hình minh hoạ theo lộ trình học cú pháp theo w3schools, bài viết chỉ tập trung vào các cú pháp đặt biệt của Golang so với các ngôn ngữ lập trình khác.

Cài đặt môi trường

Truy cập Go.dev và tải bản mới nhất của Go. Bạn có thể tải từ nguồn hoặc sử dụng brew install Golang nếu bạn đang sử dụng macOS. Sau đó, bạn có thể dùng Golang trong cửa sổ command của mình. Golang sẽ hiển thị các lệnh sau:

golang - itviec blog

Golang sẽ yêu cầu bạn tạo cấu trúc tệp cho các dự án, tất cả các dự án của bạn nên được đặt trong một tệp chung để truy cập tất cả các tính năng của Go. Mặc định, đó là mục $HOME/go, bạn có thể in ra console bằng cách sử dụng lệnh Golang env GOPATH. Bạn có thể thiết lập vị trí này ở bất cứ đâu trên máy tính của bạn. cấu trúc mặc định của thư mục sẽ là:

golang - itviec blog

Tạo dự án đầu tiên của bạn trong thư mục src/ và bạn đã sẵn sàng.

Các gói và Imports

Golang không hỗ trợ Lớp (Classes) như trong các ngôn ngữ lập trình hướng đối tượng (OOP) như Java, thay vào đó nó sử dụng hệ thống đóng gói. Mỗi gói là một thư mục trong không gian làm việc, và mỗi tệp Golang phải thuộc về một hoặc một số số gói. Do đó, mỗi tệp nên bắt đầu bằng từ khóa package theo sau là tên gói. Một tệp thực thi Golang phải chứa package main.

Golang sử dụng nhập khẩu tương đối để nhập các gói vào tệp hiện tại. Đường dẫn tương đối thường là $GOPATH/src vì hầu hết các gói được lưu trữ trong thư mục pkg. Một gói có thể được nhập khẩu bằng cách sử dụng từ khóa import theo sau là danh sách các gói trong cặp ngoặc đơn.

Thư viện chuẩn đi kèm sẵn với Golang và chứa các gói thiết yếu và cơ bản nhất.

Ví dụ: “fmt” được sử dụng để dùng lệnh Println, in kết quả ra cửa sổ console. Golang không cho phép Imports mà không sử dụng.

golang - itviec blog

Biến

Các kiểu biến cơ bản của Golang bao gồm bool (true – false), string (chuỗi ký tự), int và uint (số nguyên), float (số thực), và complex (số phức), kích thước của kiểu có thể được chỉ định ngay sau kiểu, ví dụ uint32. Một biến được khai báo bằng từ khóa var theo sau là tên biến và kiểu dữ liệu.

Biến cũng có thể được khởi tạo với cú pháp viết tắt := vì Golang có thể suy luận kiểu dữ liệu. Giống như với việc Imports, không được khởi tạo các biến không sử dụng.

golang - itviec blog

Ngoài ra, Golang không sử dụng dấu chấm phẩy để kết thúc một câu lệnh.

Một điểm quan trọng cần lưu ý là cách Golang phạm vi các biến đối với một gói:

  • Một biến công khai nếu chữ cái đầu tiên viết hoa ngược lại sẽ là biến cục bộ. 
  • Một hàm công khai nếu chữ cái đầu tiên viết hoa ngược lại sẽ là hàm cục bộ.

golang - itviec blog

Hàm

Hàm được khai báo với từ khóa func và theo sau là tên hàm, đối số, và kiểu trả về. Một ứng dụng Golang phải chứa hàm main, đây là điểm nhập của ứng dụng, không nhận bất kỳ đối số nào và không trả lại bất cứ gì. Dấu mở hàm phải cùng hàng với hàm và không thể xuống dòng.

golang - itviec blog

Đối số hàm được khai báo bằng tên theo sau là kiểu dữ liệu và phân cách bằng dấu phẩy. Kiểu trả về phải được khai báo nếu hàm trả về giá trị.

golang - itviec blog

Array, Slice, và Map

Array

Arrays có thể được khai báo bằng cách chỉ định kiểu dữ liệu cạnh dấu ngoặc với một số nguyên chỉ định kích thước của mảng. Sau đó, mảng có thể được gán giá trị thông index, một cách khác để khởi tạo là sử dụng cú pháp tắt cùng với dữ liệu trong dấu ngoặc nhọn.

Bạn không thể thay đổi độ dài của Arrays, nếu bạn chưa biết kích thước thì bạn nên dùng Slices, nó là một Arrays động. Bạn có thể khai báo một Slice giống như Arrays, mà không cần chỉ định kích thước.

golang - itviec blog

Slice

Slices có thể rất hữu ích trong việc thực hiện nhiều thao tác như: copy hoặc append, nó cũng có thể được nối liền với nhau bằng cách sử dụng hàm append với spread operator. Một slice có thể được cắt nhỏ như ví dụ sau:

golang - itviec blog

Hàm append không chỉnh sửa slice mà trả về một slice mới từ slice đã cho:

golang - itviec blog

Map

Maps tương đương với HashMap trong Java hoặc Dictionary trong python. Chúng lưu trữ các cặp khóa-giá trị. Một map có thể được tạo ra sử dụng từ khóa make theo sau là từ khóa map và kiểu dữ liệu của khóa trong dấu ngoặc và giá trị ngay sau đó.

Maps đơn giản để thao tác, chúng có thể được gán giá trị bằng cách sử dụng toán tử [ ] chỉ định khóa và giá trị, và một khóa có thể được loại bỏ bằng cách sử dụng hàm delete.

golang - itviec blog

Vòng lặp

Vòng lặp trong Golang tồn tại dưới dạng đơn giản nhất, chỉ có một cú pháp vòng lặp, đó là vòng lặp for. Vòng lặp for có thể được viết theo nhiều cách để đáp ứng nhu cầu. Cú pháp đầu tiên rất quen thuộc bắt đầu với biến con trỏ i, tiếp theo là điều kiện và tăng giá trị. Ví dụ dưới đây sẽ in ra từ 1 đến 5.

golang - itviec blog

Bạn muốn vòng lặp while? Bạn chỉ cần viết điều kiện với vòng lặp for và sử dụng một con trỏ được khai báo bên ngoài vòng lặp.

golang - itviec blog

Hàm range giúp dễ dàng lấy index và giá trị.

golang - itviec blog

Struct

Từ khóa struct được sử dụng để định nghĩa một đối tượng tương tự như class.

Vì Golang không hỗ trợ lớp (classes), dữ liệu có cùng một dạng có thể được lưu trữ trong các biến của loại dữ liệu struct đó. Một struct được tạo ra sử dụng từ khóa type và các thuộc tính của nó có thể được truy cập bằng toán tử dấu chấm (.).

golang - itviec blog

Giá trị Nil, lỗi, và trả về nhiều giá trị

Golang cung cấp một số cách linh hoạt để xử lý lỗi và giá trị nil. Cả errornil đều là các kiểu dữ liệu tự nhiên được xây dựng sẵn có thể được sử dụng để thực hiện xác minh trước khi thực hiện một số thao tác.

Golang cũng hỗ trợ trả về nhiều loại giá trị từ một hàm, điều này có thể được thực hiện bằng cách chỉ định kiểu dữ liệu trong ngoặc đơn thay cho kiểu trả về.

golang - itviec blog

errors hoặc nil có thể được trả về tùy thuộc vào thao tác được thực hiện bằng cách sử dụng một kiểm tra if. Dưới đây là một ví dụ cho thấy làm thế nào bạn có thể xử lý lỗi bằng cách kiểm tra đầu vào cho một hàm tính căn bậc hai.

golang - itviec blog

Con trỏ

Con trỏ trong Golang tương tự như con trỏ trong các ngôn ngữ khác, bạn có thể tham chiếu đến địa chỉ bộ nhớ của biến bằng cách thêm dấu và (&) trước biến và tham chiếu nó bằng dấu sao (*).

Theo mặc định, Golang truyền đối số theo giá trị chứ không phải theo tham chiếu, bạn có thể thực hiện điều này bằng cách thêm dấu sao (*) trước kiểu của đối số trong hàm, dưới đây là một ví dụ.

golang - itviec blog

Nếu không có dấu & thì nó sẽ in ra 5 vì một bản sao của biến đã được truyền, và một khi chúng ta có tham chiếu, chúng ta cần giải tham chiếu bộ nhớ để lấy giá trị bằng cách sử dụng dấu * trên biến một lần nữa.

Các nguồn học Golang miễn phí

Youtube Playlist: Net Ninja – Golang Tutorial (Go) for Beginners

học golang - youtube playlist - itviec blog

YouTube Playlist này cung cấp một loạt các bài giảng về lập trình Golang cho mọi cấp độ, từ người mới bắt đầu đến nâng cao. Người xem có thể tìm thấy vô số video về các khái niệm cơ bản, dự án code, và kỹ thuật lập trình.

Nền tảng này là lựa chọn tốt cho những người học thông qua hình ảnh, những người thích được hướng dẫn từng bước và học bằng ví dụ.

Ưu điểm: 

  • Học Golang trên Youtube hoàn toàn miễn phí.
  • Bài giảng đủ thời lượng để cung cấp thông tin và khái niệm quan trọng về Go.
  • Cung cấp kiến thức, kinh nghiệm thực tế như một lập trình viên.
  • Nội dung có tính giải trí không bị nhàm chán.

Nhược điểm: 

  • Không có công cụ thực hành.
  • Không yêu cầu cam kết, người học dễ bỏ ngang

W3schools – Go Tutorial

học golang - itviec blog

W3Schools cung cấp một hướng dẫn dạng tài liệu quen thuộc với các lập trình viên rất dễ theo dõi, cung cấp các khái niệm cơ bản về lập trình Go. Đây là xuất phát điểm lý tưởng cho người mới bắt đầu. W3Schools dạy Golang thông qua các ví dụ tương tác, câu đố, và bài tập để củng cố việc học

Sự đơn giản khiến W3Schools trở thành một nguồn tài nguyên tuyệt vời cho những người mới làm quen với lập trình hoặc Go.

Ưu điểm: 

  • Tài liệu đầy đủ, có console để chạy code trong lúc học.
  • Chia theo từng mục dễ tra cứu và tìm kiếm.
  • Học đúng kiến thức mình cần không cần phải theo đúng lộ trình.
  • Sau khi học có thể dùng làm tài liệu tham khảo để làm việc trong nhiều năm sau đó.

Nhược điểm: 

  • Không có giảng viên.
  • Cảm giác giống như đọc tài liệu, có thể dẫn đến nhàm chán.

Các nguồn học Golang có phí

Sách: Learning Golang – Jon Bodner (2021)

learning go - itviec blog

“Learning Go” là một cuốn sách được các chuyên gia đánh giá cao, bao gồm cả các khái niệm cơ bản và các chủ đề phức tạp. Cuốn sách này phù hợp cho những người mới, cũng như các lập trình viên đã có kinh nghiệm muốn chuyển sang Go.

Điểm mạnh của nguồn này là phong cách viết của tác giả rõ ràng và đưa ra những ví dụ rất thực tế.

Giá tham khảo: 52$ USD

Ưu điểm: 

  • Được viết bởi chuyên gia Golang nên có thể cung cấp những góc nhìn sâu sắc về ngôn ngữ lập trình này.
  • Là phiên bản sách khi đọc không cần phải truy cập web tránh phân tâm khi học. 
  • Phù hợp với người học thông qua hình thức đọc tài liệu như ở trường đại học.

Nhược điểm: 

  • Phải tốn chi phí để mua sách.
  • Phải tự cài đặt công cụ để thực hành.
  • Không phù hợp với người học mạnh thích nghe nhìn và tương tác.

Khóa học: Programming with Google Golang Specialization do giảng viên Ian Harris từ đại học California, Irvine

học golang - itviec blog

Coursera giới thiệu các khóa học về lập trình Golang do các giáo sư đại học và chuyên gia trong ngành giảng dạy. Các khóa học thường bao gồm bài giảng video, bài tập được đánh giá bởi những người học khác, và diễn đàn thảo luận.

Coursera phù hợp nhất với những người học tìm kiếm một chương trình học có cấu trúc, cung cấp chứng chỉ khi hoàn thành, mang lại cả kiến thức và bằng cấp.

Giá tham khảo: 59$ USD mỗi tháng cho tài khoản premium

Ưu điểm: 

  • Coursera luôn cung cấp các chứng nhận hoàn thành tín chỉ, được công nhận như các tín chỉ chính thức tại một số trường đại học quốc tế. 
  • Cung cấp nguồn học đa dạng từ video đến tài liệu và tích hợp công cụ thực hành.
  • Có các bài kiểm tra để tự đánh giá năng lực.
  • Có yêu cầu cam kết hoàn thành khi học, người học thường ít bỏ ngang hơn.

Nhược điểm: 

  • Tốn chi phí khi mua từng khoá.
  • Thời gian học thường dài.

Khóa học: Go Essentials: Concurrency, Connectivity, and High-Performance Apps

học golang - itviec blog

LinkedIn Learning cung cấp các khóa học chuyên nghiệp về lập trình Go, tập trung vào các ứng dụng thực tế và các phương pháp phát triển được ứng dụng tại các công ty và tập đoàn quốc tế. Những khóa học này được giảng dạy bởi các lập trình viên được có kinh nghiệm được chọn lọc bởi LinkedIn, mong muốn phục vụ cho người mới bắt đầu và người học ở trình độ trung bình.

Đây là một nguồn tài nguyên rất tốt cho những người muốn nâng cao kỹ năng lập trình của mình để thăng tiến trong sự nghiệp.

Giá tham khảo: 25$ USD mỗi tháng cho tài khoản LinkedIn Learning

Ưu điểm: 

  • Linkedin learning sau khi học xong có thể thêm vào profile công việc để nhà tuyển dụng nhìn thấy.
  • Thời gian học ngắn.
  • Có thể kết nối và tương tác với giảng viên qua mạng xã hội Linkedin
  • Các ví dụ thường rất cập nhật với thị trường lao động.

Nhược điểm: 

  • Chi phí đắt khi mua một tài khoản để truy cập toàn bộ các khoá học của Linkedin Learning.
  • Nội dung của khóa học thường rất ít tính giải trí nên xem có thể bị chán.

Câu hỏi thường gặp khi học Golang 

Họ Golang dễ không?

Golang là một ngôn ngữ tương đối dễ học, đặc biệt là đối với các lập trình viên đã có kinh nghiệm với C++ hoặc Java. Golang được thiết kế để là một ngôn ngữ đơn giản, với ít tính năng hơn so với nhiều ngôn ngữ lập trình khác.

Mất bao lâu để học Golang?

Nếu bạn không có kiến thức lập trình trước về Java hoặc C, thì bạn sẽ mất khoảng 2-3 tháng để học Go. Tuy nhiên, những người có kiến thức trước đó có thể học nó trong thời gian ngắn hơn.

Golang có dễ như Python không?

Tuy nhiên, điểm quan trọng cần nhớ là: Python dễ đọc hơn nhưng không ngắn gọn bằng Go.

Golang có đường cong học tập cao hơn, tức là Golang không dễ thành thạo, nhưng khi đã biết hầu hết các khái niệm cơ bản việc ứng dụng sẽ ngày càng trở nên dễ hơn.

Học Golang dễ hơn học C++ không?

Cú pháp của Golang đơn giản hơn so với C++ do đó dễ học và viết mã hơn. Quản lý bộ nhớ trong Golang là tự động, giảm bớt phần lớn thời gian lập trình viên lãng phí khi quản lý bộ nhớ thủ công trong các ngôn ngữ như C++.

Đọc thêm: Tổng hợp 11 tài liệu lập trình C++ miễn phí chất nhất

Tổng kết học Golang

Golang nổi bật với sự đơn giản, hiệu quả và khả năng ứng dụng ở cấp độ hệ thống, nó trở thành kỹ năng quan trọng đối với các lập trình viên muốn xây dựng các giải pháp nhanh chóng, đáng tin cậy và có khả năng mở rộng.

Với nhiều nguồn học tập khác nhau, từ các hướng dẫn trực tuyến đến các khóa học và sách toàn diện, việc học một ngôn ngữ lập trình nói chung và Golang nói riêng trở nên dễ dàng hơn, mở ra cơ hội nghề nghiệp trong các công việc phát triển máy chủ web, hệ thống quy mô lớn. Bạn giờ đây đã sẵn sàng để viết chương trình đầu tiên của mình bằng Go, hãy thử thực hành các cú pháp được hướng dẫn trên.