Giới Thiệu Go
Go là gì?
Go (hay Golang) là ngôn ngữ lập trình mã nguồn mở do Google tạo ra năm 2007, ra mắt công khai năm 2009. Ba tác giả ban đầu là Robert Griesemer, Rob Pike và Ken Thompson — những người đã xây dựng Unix và UTF-8.
Tại sao Google tạo ra Go?
Vào cuối những năm 2000, Google đang vật lộn với các vấn đề thực tế:
- C++ cho hiệu năng cao nhưng build chậm kinh khủng, cú pháp phức tạp
- Java verbose, quản lý dependency rườm rà
- Python dễ viết nhưng chậm cho server hiệu năng cao
Go ra đời để giải quyết cả ba: build nhanh như scripting, chạy nhanh như C, code dễ như Python.
Đặc điểm nổi bật
| Đặc điểm | Ý nghĩa |
|---|---|
| Compiled | Biên dịch thẳng ra mã máy, không cần runtime như JVM |
| Statically typed | Kiểu dữ liệu kiểm tra lúc compile, bắt lỗi sớm |
| Garbage Collection | Tự quản lý bộ nhớ, không cần free() như C |
| Goroutine | Concurrency tích hợp sẵn, nhẹ hơn thread hệ điều hành |
| Fast compilation | Dự án lớn build trong vài giây |
| Chỉ 25 từ khóa | Cú pháp tối giản, dễ học |
Go dùng để làm gì?
- Backend API / microservices: Docker, Kubernetes viết bằng Go
- CLI tools: GitHub CLI, Terraform, Hugo
- Network programming: web servers, proxies
- Cloud infrastructure: hầu hết các tool DevOps hiện đại
Cài đặt Go
Tải tại golang.org/dl, cài đặt rồi kiểm tra:
go version
# go version go1.23.0 linux/amd64
Cấu trúc một chương trình Go
package main // (1) mọi file Go phải thuộc một package
import "fmt" // (2) import thư viện chuẩn
func main() { // (3) hàm main() là điểm vào chương trình
fmt.Println("Xin chào, Go!")
}
Giải thích từng dòng:
package main— khai báo package. Packagemainđặc biệt: nó tạo ra file thực thiimport "fmt"— nhập thư việnfmt(format), dùng để in ra màn hìnhfunc main()— hàm bắt buộc, Go bắt đầu chạy từ đây
Các lệnh Go cơ bản
go run main.go # biên dịch + chạy ngay (dùng lúc phát triển)
go build -o app . # biên dịch ra file thực thi 'app'
go fmt ./... # tự động format code theo chuẩn Go
go test ./... # chạy tất cả unit test
go mod init myapp # khởi tạo module mới
Lưu ý: Go bắt buộc format code theo một chuẩn duy nhất. Không có tranh cãi về tab vs space — Go dùng tab.
example.go
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("Xin chào, Go!")
fmt.Printf("Go version: %s\n", runtime.Version())
fmt.Printf("OS: %s | Arch: %s\n", runtime.GOOS, runtime.GOARCH)
}