0

Go Zero to Hero - Bài 5: Khám phá các lệnh Go CLI cơ bản (go run, go build, go fmt)

Khi cài đặt Go, bạn không chỉ cài một trình biên dịch (compiler), mà bạn đang cài cả một hệ sinh thái toolchain đi kèm. Dưới đây là bộ 3 lệnh bạn sẽ gõ mòn bàn phím trong sự nghiệp làm Gopher của mình.


1. go run: Chạy thử tức thì (Development Mode)

Khi bạn đang code và muốn xem kết quả ngay lập tức, go run là lệnh bạn cần.

Cách dùng:

go run main.go

Điều gì thực sự xảy ra dưới nền?

Nhiều người mới lầm tưởng go run biến Go thành một ngôn ngữ thông dịch (interpreted language) như Python hay PHP. Hoàn toàn không phải!

Khi bạn gõ go run, Go vẫn làm nhiệm vụ biên dịch code của bạn ra mã máy (machine code). Tuy nhiên, file thực thi (binary) đó sẽ được giấu vào một thư mục tạm (temp folder) của hệ điều hành, chạy nó để in ra kết quả cho bạn xem, và sau đó tự động xóa đi khi chương trình kết thúc.

Ứng dụng:

Tuyệt vời cho quá trình phát triển (Local Development) hoặc khi bạn muốn chạy các script nhỏ. Tuy nhiên, tuyệt đối không dùng go run trên môi trường Production.


2. go build: Vũ khí tối thượng của Golang (Production Mode)

Nếu go run dùng để nháp, thì go build chính là lúc bạn "xuất xưởng" sản phẩm. Đây là lệnh định hình sức mạnh cốt lõi của Go trên môi trường Cloud/Microservices.

Cách dùng cơ bản:

# Build toàn bộ project trong thư mục hiện tại
go build

# Build và đặt tên file đầu ra theo ý muốn
go build -o my_super_app main.go

Điều gì xảy ra?

Go sẽ gom tất cả code của bạn, cộng với các thư viện import, và nhét tất cả vào một file nhị phân (binary) duy nhất. File này chứa sẵn mọi thứ cần thiết để chạy mà không cần dựa dẫm vào môi trường bên ngoài (không cần cài Go trên server). Bạn copy file này quăng lên máy chủ Linux, cấp quyền thực thi (chmod +x) và chạy cái vèo!

Tính năng "Sát thủ": Cross-Compilation (Biên dịch chéo)

Giả sử bạn đang code trên Macbook (Chip ARM) hoặc Windows, nhưng server Production của bạn lại chạy Linux (Chip AMD64). Với C++ hay Java, việc build code cho hệ điều hành khác là một cực hình. Với Go, bạn chỉ cần nạp thêm biến môi trường trước lệnh build:

# Đang dùng Windows/Mac nhưng build ra file chạy cho máy chủ Linux
GOOS=linux GOARCH=amd64 go build -o my_app main.go

Chỉ một dòng lệnh, file my_app sinh ra đã sẵn sàng để quăng lên bất kỳ con server Ubuntu hay CentOS nào. Đây chính là phép thuật giúp việc viết Dockerfile cho Go ứng dụng trở nên siêu dễ và siêu nhẹ!


3. go fmt: Kẻ độc tài mang lại hòa bình

Ở Bài 3, chúng ta đã nhắc sơ qua về công cụ này. Nếu bạn làm việc trong một team, chắc hẳn bạn đã gặp cảnh "choảng nhau" sứt đầu mẻ trán chỉ vì: Thụt lề dùng Tab hay 4 Spaces? Ngoặc nhọn để trên cùng dòng hay xuống dòng?

Lệnh go fmt (viết tắt của format) sinh ra để kết thúc mọi cuộc chiến tranh tôn giáo đó.

Cách dùng:

# Format file hiện tại
go fmt main.go

# Format TOÀN BỘ file .go trong project (Lệnh hay dùng nhất)
go fmt ./...

(Lưu ý: ... trong Go có nghĩa là đệ quy tìm kiếm tất cả các thư mục con).

Tại sao nó quan trọng?

Khi chạy lệnh này, Go sẽ tự động căn chỉnh lại toàn bộ source code của bạn theo một chuẩn mực duy nhất do Google quy định. Bạn không thể thay đổi config này. Nhờ sự "độc tài" này, source code của toàn bộ cộng đồng Go trên thế giới trông giống hệt nhau. Bạn có thể mở một file code Go trên Github của một pháp sư vô danh nào đó, và vẫn thấy cấu trúc căn lề thân thuộc như code nhà làm.

Đa số các IDE như VS Code hay GoLand hiện nay đều tự động ngầm chạy lệnh go fmt mỗi khi bạn bấm Ctrl + S (Lưu file).


Tổng kết

Bạn đã nắm trong tay bộ 3 quyền lực:

  • go run: Dùng lúc đang code, cần test nhanh kết quả.
  • go build: Dùng để đóng gói thành file binary độc lập, mang đi deploy lên Server/Docker. Cực mạnh với Cross-Compilation.
  • go fmt: Dùng để làm đẹp code theo tiêu chuẩn quốc dân.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.