Có, trong Go, bạn có thể trả về nhiều giá trị từ một hàm. Đây là một tính năng mạnh mẽ và linh hoạt của ngôn ngữ, cho phép bạn trả về nhiều giá trị cùng một lúc mà không cần phải sử dụng các cấu trúc dữ liệu phức tạp như structs hay slices.

Cú pháp trả về nhiều giá trị

Để trả về nhiều giá trị, bạn chỉ cần chỉ định kiểu dữ liệu của các giá trị đó trong định nghĩa hàm, cách nhau bởi dấu phẩy.

Ví dụ đơn giản

Dưới đây là một ví dụ đơn giản về một hàm trả về hai giá trị: một số nguyên và một chuỗi.

package main

import "fmt"

// Hàm trả về một số và một thông điệp
func getDetails() (int, string) {
    return 42, "Hello, Go!"
}

func main() {
    // Gọi hàm và nhận các giá trị trả về
    number, message := getDetails()
    fmt.Printf("Number: %d, Message: %sn", number, message)
}

Giải thích mã

  • Hàm getDetails: Hàm này định nghĩa hai giá trị trả về: một giá trị kiểu int và một giá trị kiểu string. Nó trả về số 42 và chuỗi "Hello, Go!".
  • Gọi hàm: Trong hàm main, chúng ta gọi getDetails() và lưu trữ các giá trị trả về vào các biến numbermessage.
  • In ra kết quả: Cuối cùng, chúng ta in ra các giá trị đã nhận được.

Kết quả khi chạy mã

Khi bạn chạy đoạn mã trên, bạn sẽ nhận được kết quả:

Number: 42, Message: Hello, Go!

Trả về nhiều giá trị với tên

Ngoài việc trả về các giá trị mà không có tên, bạn cũng có thể định nghĩa các giá trị trả về với tên, điều này có thể giúp làm rõ hơn về ý nghĩa của các giá trị này.

Ví dụ trả về với tên

package main

import "fmt"

// Hàm trả về với tên
func calculateSumAndDifference(a int, b int) (sum int, difference int) {
    sum = a + b
    difference = a - b
    return // Không cần chỉ định các giá trị trả về ở đây
}

func main() {
    sum, difference := calculateSumAndDifference(10, 5)
    fmt.Printf("Sum: %d, Difference: %dn", sum, difference)
}

Kết quả khi chạy mã

Khi bạn chạy đoạn mã này, bạn sẽ nhận được kết quả:

Sum: 15, Difference: 5

Giải thích mã

  • Hàm calculateSumAndDifference: Hàm này nhận hai tham số và trả về hai giá trị: tổng và hiệu. Các giá trị trả về được đặt tên là sumdifference.
  • Sử dụng return không có giá trị: Trong hàm, bạn có thể sử dụng return mà không cần chỉ định giá trị, Go sẽ tự động trả về các giá trị đã được gán.

Kết luận

Việc trả về nhiều giá trị từ một hàm trong Go là một tính năng hữu ích, giúp mã trở nên gọn gàng và dễ hiểu. Bạn có thể trả về các giá trị mà không cần chỉ định tên hoặc sử dụng các tên cho giá trị trả về, điều này có thể giúp làm rõ mục đích của từng giá trị. Kỹ thuật này thường được sử dụng trong các hàm mà cần trả về thông tin bổ sung, chẳng hạn như kết quả và lỗi trong các hàm xử lý.