Tổng quan
| Đặc điểm | Go (Golang) | Java |
| Paradigm | Procedural, Concurrent (CSP) | Object-Oriented, Multi-paradigm |
| Ra mắt | 2009 (Google) | 1995 (Sun Microsystems) |
| Biên dịch | Ahead-of-time (AOT) → binary native | JIT (JVM bytecode) + AOT (GraalVM) |
| Runtime | Không VM, binary standalone | JVM (Java Virtual Machine) |
| Memory Management | Garbage Collector (tuned cho latency thấp) | Garbage Collector (G1, ZGC, Shenandoah...) |
| Concurrency | Goroutine + Channel (CSP model) | Thread + Lock/Monitor, CompletableFuture, Virtual Thread (Java 21+) |
| Type System | Static, type inference, no generics (trước 1.18), structural interface | Static, nominal, generics đầy đủ, annotation processing |
| Error Handling | Explicit error values (multi-return) | Checked/Unchecked Exceptions |
| Package Management | Go Modules (go.mod) | Maven (pom.xml), Gradle (build.gradle) |
| Binary Size | Nhỏ (~5-10MB static binary) | Lớn (cần JRE ~50MB+ hoặc native-image) |
| Startup Time | Rất nhanh (ms) | Chậm hơn (JVM warmup), nhanh với GraalVM native |
So sánh chi tiết các đặc điểm ngôn ngữ
| STT | Tiêu chí | Go | Java |
| 1 |
Kiểu ngôn ngữ |
Procedural, hỗ trợ pattern kiểu dynamic language |
Object-Oriented thuần túy (có functional từ Java 8) |
| 2 |
Class & Constructor |
Không có class. Dùng struct + method receiver. Không có constructor (dùng factory function). |
Có class, constructor, inheritance, polymorphism. |
| 3 |
Xử lý lỗi |
Error handling: trả về (T, error). Không có try-catch. |
Exception handling: try-catch-finally, throws, checked/unchecked. |
| 4 |
Kế thừa (Inheritance) |
Không có inheritance. Dùng Composition (embedding struct) + Interface. |
Hỗ trợ đơn kế thừa (extends) + implements interface. |
| 5 |
Ép kiểu ngầm (Implicit conversion) |
Không có. Ép kiểu tường minh (explicit). |
Có widening conversion (int→long, float→double...). |
| 6 |
Nạp chồng hàm (Overloading) |
Không hỗ trợ. Tên hàm phải duy nhất trong package. |
Hỗ trợ overloading (cùng tên, khác tham số). |
| 7 |
Generics |
Hỗ trợ từ Go 1.18 (type parameters). |
Hỗ trợ từ Java 5 (type erasure). |
| 8 |
Channel / Concurrency primitive |
Built-in: chan, select, go keyword. CSP model. |
Thư viện: java.util.concurrent, Channel qua thư viện 3rd party. Virtual Thread (Java 21). |
| 9 |
Vòng lặp |
Chỉ có for (dùng làm while, infinite, range). Không có while/do-while. |
Có for, while, do-while, for-each. |
| 10 |
Kích thước binary |
Compact, static linking mặc định. |
Cần JRE. Native image (GraalVM) nhỏ hơn nhưng phức tạp. |
| 11 |
Thread/Goroutine |
Goroutine nhẹ (~2KB stack), hàng trăm nghìn OK. Scheduler userspace. |
Thread OS (~1MB stack), tốn resource. Virtual Thread (Java 21) nhẹ như goroutine. |
Ví dụ Hello World
// Go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
// Java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Ví dụ Concurrency
// Go: Goroutine + Channel
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
results <- j * 2
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
for w := 1; w <= 3; w++ { go worker(w, jobs, results) }
for j := 1; j <= 5; j++ { jobs <- j }
close(jobs)
for a := 1; a <= 5; a++ { fmt.Println(<-results) }
}
// Java 21+: Virtual Thread + Structured Concurrency
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
var futures = IntStream.range(1, 6)
.mapToObj(i -> scope.fork(() -> compute(i)))
.toList();
scope.join();
futures.forEach(f -> System.out.println(f.get()));
}
Khi nào chọn Go, khi nào chọn Java?
| Chọn Go khi... | Chọn Java khi... |
- Microservice, Cloud-native, Kubernetes (k8s viết bằng Go)
- Cần startup nhanh, binary nhỏ, deploy đơn giản
- High concurrency, low latency (API gateway, proxy, message queue)
- Team thích code đơn giản, explicit, ít abstraction
- CLI tools, DevOps tools (Terraform, Prometheus, Docker...)
|
- Enterprise application phức tạp, domain-rich
- Cần ecosystem mature: Spring, Hibernate, JPA, Security...
- Team lớn, cần type safety chặt, refactoring an toàn
- Legacy system integration, transaction management
- Android development (kotlin trên JVM)
|
Xu hướng hiện tại
- Go: Đáng kể trong Cloud/Infrastructure, Sidecar (Istio/Envoy), Serverless.
- Java: Vẫn thống trị Enterprise. Java 21 LTS + Virtual Threads + GraalVM native-image thu hẹp gap startup/memory.
- Kotlin: Thay thế Java cho Android & Spring Boot mới (concise, null-safety, coroutine).