Chuyển đổi kiểu xảy ra khi chúng ta gán giá trị của một kiểu dữ liệu cho một kiểu dữ liệu khác. Các ngôn ngữ được gõ tĩnh như C/C++, Java, cung cấp hỗ trợ cho chuyển đổi kiểu ngầm định nhưng Golang thì khác, vì nó không hỗ trợ ép kiểu tự động hoặc ngầm định ngay cả khi các kiểu dữ liệu tương thích. Lý do cho điều này bởi Hệ thống kiểu mạnh của Golang không cho phép thực hiện. Đối với chuyển đổi kiểu, bạn phải triển khai rõ ràng.
Theo mô tả, không có từ hoặc thuật ngữ ép kiểu trong Golang. Nếu bạn thử tìm kiếm Ép kiểu trong mô tả hoạt tài liệu sử dụng Golang, bạn sẽ không tìm thấy gì giống như thế này. Chỉ có Chuyển đổi kiểu. Trong các ngôn ngữ lập trình khác, ép kiểu cũng được gọi là chuyển đổi kiểu.
Tại sao cần phải chuyển đổi kiểu?
Vâng, nếu bạn cần tận dụng một số đặc điểm nhất định của hệ thống phân cấp kiểu dữ liệu, thì chúng ta phải thay đổi các thực thể từ kiểu dữ liệu này sang kiểu dữ liệu khác. Cú pháp chung để chuyển đổi giá trị val sang kiểu T là T(val).
Ví dụ:
var geek1 int = 845
// chuyển đổi kiểu rõ ràng
var geek2 float64 = float64(geek1)
var geek3 int64 = int64(geek1)
var geek4 uint = uint(geek1)
// Chương trình Go tìm trung bình của các số
package main
import "fmt"
func main() {
// lấy dữ liệu cần thiết vào các biến
var totalsum int = 846
var number int = 19
var avg float32
// chuyển đổi kiểu rõ ràng
avg = float32(totalsum) / float32(number)
// Hiện kết quả
fmt.Printf("Average = %f\n", avg)
}
Kết quả:
Trung bình = 44.526318
Lưu ý: Vì Golang có hệ thống kiểu dữ liệu mạnh nên nó không cho phép trộn (như phép cộng, phép trừ, phép nhân, phép chia, v.v.) các kiểu số trong biểu thức và bạn cũng không được phép thực hiện phép gán giữa hai kiểu dữ liệu hỗn hợp.
Ví dụ:
var geek1 int64 = 875
//nó sẽ đưa ra lỗi thời gian biên dịch vì chúng ta
// đang thực hiện một phép gán giữa
// các kiểu hỗn hợp tức là int64 là kiểu int
var geek2 int = geek1
var geek3 int = 100
// nó đưa ra lỗi thời gian biên dịch
// vì đây là phép toán không hợp lệ
// vì các kiểu là hỗn hợp tức là
// int64 và int
var addition = geek1 + geek3