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é!