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:

  1. package main — khai báo package. Package main đặc biệt: nó tạo ra file thực thi
  2. import "fmt" — nhập thư viện fmt (format), dùng để in ra màn hình
  3. func 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)
}