Dưới đây là 30 đoạn code ngắn so sánh các tính năng của Java Core (phiên bản mới nhất, Java 21) và Golang (phiên bản mới nhất, Go 1.22 tính đến tháng 2/2025). Các ví dụ tập trung vào sự khác biệt về cú pháp, cách tiếp cận và tính năng ngôn ngữ cốt lõi, giúp bạn nhanh chóng nắm bắt khi chuyển từ Java sang Go. Mỗi đoạn code được thiết kế ngắn gọn, dễ hiểu.
1. Khai báo biến
Java
int x = 10;
String name = "Java";
Go
x := 10
name := "Go"
2. Hằng số
Java
final int MAX = 100;
Go
const MAX = 100
3. In ra màn hình
Java
System.out.println("Hello, Java!");
Go
fmt.Println("Hello, Go!")
4. Hàm cơ bản
Java
int add(int a, int b) {
return a + b;
}
Go
func add(a, b int) int {
return a + b
}
5. Hàm trả về nhiều giá trị
Java
class Result {
int sum, diff;
Result(int sum, int diff) {
this.sum = sum;
this.diff = diff;
}
}
Result calc(int a, int b) {
return new Result(a + b, a - b);
}
Go
func calc(a, b int) (int, int) {
return a + b, a - b
}
6. Mảng
Java
int[] numbers = {1, 2, 3};
Go
numbers := [3]int{1, 2, 3}
7. Slice (Danh sách động)
Java
List<Integer> list = new ArrayList<>();
list.add(1);
Go
list := []int{1}
list = append(list, 2)
8. Vòng lặp for
Java
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
Go
for i := 0; i < 5; i++ {
fmt.Println(i)
}
9. Vòng lặp for-each
Java
List<String> names = List.of("A", "B");
for (String name : names) {
System.out.println(name);
}
Go
names := []string{"A", "B"}
for _, name := range names {
fmt.Println(name)
}
10. Điều kiện if
Java
int x = 10;
if (x > 0) {
System.out.println("Positive");
}
Go
x := 10
if x > 0 {
fmt.Println("Positive")
}
11. Switch
Java
int day = 2;
switch (day) {
case 1 -> System.out.println("Monday");
case 2 -> System.out.println("Tuesday");
default -> System.out.println("Unknown");
}
Go
day := 2
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
default:
fmt.Println("Unknown")
}
12. Class cơ bản
Java
class Person {
String name;
Person(String name) {
this.name = name;
}
}
Go
type Person struct {
Name string
}
func NewPerson(name string) Person {
return Person{Name: name}
}
13. Phương thức
Java
class Person {
String name;
String getName() {
return name;
}
}
Go
type Person struct {
Name string
}
func (p Person) getName() string {
return p.Name
}
14. Interface
Java
interface Animal {
void speak();
}
class Dog implements Animal {
public void speak() {
System.out.println("Woof");
}
}
Go
type Animal interface {
Speak()
}
type Dog struct{}
func (d Dog) Speak() {
fmt.Println("Woof")
}
15. Xử lý ngoại lệ
Java
try {
int x = 1 / 0;
} catch (ArithmeticException e) {
System.out.println("Error");
}
Go
if _, err := someFunc(); err != nil {
fmt.Println("Error")
}
16. Goroutine (Concurrency)
Java
Thread thread = new Thread(() -> System.out.println("Running"));
thread.start();
Go
go func() {
fmt.Println("Running")
}()
17. Channel
Java
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
queue.put("Data");
Go
ch := make(chan string)
ch <- "Data"
18. Map (Từ điển)
Java
Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
Go
map := make(map[string]int)
map["key"] = 1
19. Null/Nil
Java
String text = null;
if (text == null) {
System.out.println("Empty");
}
Go
var text *string
if text == nil {
fmt.Println("Empty")
}
20. Chuỗi ký tự
Java
String text = "Hello " + "Java";
Go
text := "Hello " + "Go"
21. Format chuỗi
Java
String formatted = String.format("Value: %d", 42);
Go
formatted := fmt.Sprintf("Value: %d", 42)
22. Thời gian hiện tại
Java
Instant now = Instant.now();
Go
now := time.Now()
23. Random number
Java
int rand = new Random().nextInt(100);
Go
rand := rand.Intn(100)
24. Đọc file
Java
String content = Files.readString(Path.of("file.txt"));
Go
content, _ := os.ReadFile("file.txt")
25. Ghi file
Java
Files.writeString(Path.of("file.txt"), "Data");
Go
os.WriteFile("file.txt", []byte("Data"), 0644)
26. JSON Encoding
Java
record Data(String name) {}
String json = new ObjectMapper().writeValueAsString(new Data("Test"));
Go
type Data struct {
Name string `json:"name"`
}
json, _ := json.Marshal(Data{Name: "Test"})
27. JSON Decoding
Java
Data data = new ObjectMapper().readValue("{\"name\":\"Test\"}", Data.class);
Go
var data Data
json.Unmarshal([]byte(`{"name":"Test"}`), &data)
28. Hàm lambda/closure
Java
Function<Integer, Integer> square = x -> x * x;
Go
square := func(x int) int { return x * x }
29. Generics (Kiểu tổng quát)
Java
class Box<T> {
T value;
Box(T value) { this.value = value; }
}
Box<Integer> box = new Box<>(42);
Go
type Box[T any] struct {
value T
}
box := Box[int]{value: 42}
30. Pattern Matching (Java) vs Type Assertion (Go)
Java
Object obj = "Text";
if (obj instanceof String s) {
System.out.println(s);
}
Go
var i interface{} = "Text"
if s, ok := i.(string); ok {
fmt.Println(s)
}
So sánh tổng quan
- Java: Ngôn ngữ hướng đối tượng, cú pháp dài dòng, mạnh về type safety, có JVM overhead.
- Go: Ngôn ngữ đơn giản, tập trung concurrency (goroutines, channels), không có class mà dùng struct, không có try-catch.
Hy vọng các ví dụ này giúp bạn nắm rõ sự khác biệt và tương đồng giữa Java Core và Go! Nếu cần giải thích thêm hoặc ví dụ khác, cứ hỏi nhé!
Bình luận