Golang Senior
🧠 1. Cách Go biên dịch và thực thi
Go không phải là ngôn ngữ thông dịch như Python hay JavaScript, mà là ngôn ngữ biên dịch tĩnh (statically compiled language). Điều này có nghĩa là:
Source code
.go
sẽ được biên dịch thành binary machine code trực tiếp bởigo build
.File thực thi sau khi build là self-contained binary (không cần VM hoặc runtime như Java hay .NET).
Việc biên dịch nhanh chóng và hiệu quả, phù hợp với DevOps và CI/CD.
👉 Ví dụ: go build
tạo ra file main
hoặc main.exe
chạy trực tiếp mà không cần Go runtime.
🧵 2. Concurrency: Goroutines và Channel
Go sử dụng goroutines thay vì threads truyền thống.
Goroutine là lightweight (nhẹ hơn threads rất nhiều, chỉ vài KB stack memory ban đầu).
Thay vì dùng
Thread.start()
, Go chỉ cầngo myFunc()
để tạo goroutine.Quản lý goroutines được điều phối bởi Go runtime scheduler, hoạt động kiểu M:N scheduling (nhiều goroutine trên ít OS threads).
Channels giúp goroutines giao tiếp một cách an toàn, không cần mutex.
func worker(ch chan string) {
msg := <-ch
fmt.Println("Received:", msg)
}
func main() {
ch := make(chan string)
go worker(ch)
ch <- "Hello"
}
🗂️ 3. Package system và workspace
Go tổ chức theo package, mỗi thư mục là một package.
main
package là entry point, phải cófunc main()
.Hệ thống module (
go.mod
) giúp quản lý dependencies giống nhưpackage.json
của Node.js.
module github.com/tai/ocop
go 1.21
require (
github.com/gin-gonic/gin v1.9.0
)
📦 4. Garbage Collection
Go có Garbage Collector (GC) hiện đại, giúp tự động quản lý bộ nhớ.
GC của Go là concurrent & non-blocking (từ Go 1.18+ trở đi), cực kỳ hiệu quả với hệ thống backend cần real-time.
Không cần
free()
hoặcdelete
như C/C++.
✅ 5. Static typing nhưng syntax đơn giản
Go là statistically typed như Java, C++.
Nhưng không có generics (trước Go 1.18), và cú pháp tối giản:
var name string = "Tai"
age := 30 // Go tự suy luận kiểu
📚 6. Interface ngầm (Implicit Interfaces)
Go không cần implements
keyword. Interface là structural typing.
type Reader interface {
Read(p []byte) (n int, err error)
}
func process(r Reader) { ... }
// Bất kỳ struct nào có `Read` đúng signature đều là Reader, không cần khai báo implements.
🧪 7. Testing built-in
Go hỗ trợ testing trực tiếp với go test
.
Dùng file
_test.go
Có thể chạy benchmark, unit test, table-driven test
func TestSum(t *testing.T) {
got := Sum(1, 2)
want := 3
if got != want {
t.Errorf("got %d, want %d", got, want)
}
}
⚙️ 8. Cross Compilation dễ dàng
Go hỗ trợ build cho các OS/architecture khác nhau rất dễ:
GOOS=linux GOARCH=amd64 go build -o app-linux
GOOS=windows GOARCH=amd64 go build -o app.exe
🛠️ 9. Tooling mạnh mẽ
go fmt
: auto format codego vet
: static analysisgo mod
: quản lý modulego doc
,gopls
: giúp tạo tài liệu và hỗ trợ IDE
💡 Tổng kết
Go hoạt động với triết lý: “Do more with less”. Không phải lúc nào cũng có nhiều tính năng như Java hay Rust, nhưng Go hướng đến sự đơn giản, dễ bảo trì, hiệu suất cao và concurrency mạnh mẽ. Đó là lý do tại sao nó rất phù hợp với backend, cloud services, microservices, DevOps và cả hệ thống phân tán.
Last updated