Go 类型转换
Go - 类型转换 (Type Conversion)
Section titled “Go - 类型转换 (Type Conversion)”在 Go 中,将值从一种类型转换为另一种类型称为 类型转换 (type conversion)。与一些允许某些类型之间隐式转换(如 int 到 float)的语言不同,Go 要求转换必须是显式 (explicit) 的。
这意味着必须显式地指定要转换成的类型。这种设计选择增强了代码的清晰度,并防止了因意外的自动转换而引起的潜在错误。
语法 (Syntax)
Section titled “语法 (Syntax)”类型转换的语法很简单:
TargetType(expression)其中 TargetType 是要转换成的类型,expression 是要转换的值或变量。
常见转换场景 (Common Conversion Scenarios)
Section titled “常见转换场景 (Common Conversion Scenarios)”- 数值转换 (Numeric Conversions): 在不同的整数类型之间或整数类型与浮点类型之间进行转换。
var i int = 42var f float64 = float64(i) // 将 int 转换为 float64var u uint = uint(i) // 将 int 转换为 uint
var fLarge float64 = 12345.678var iTruncated int = int(fLarge) // 将 float64 转换为 int(小数部分被丢弃)
fmt.Println(i, f, u) // 输出: 42 42 42fmt.Println(fLarge, iTruncated) // 输出: 12345.678 12345注意: 从较大类型转换为较小类型(例如,int64 到 int32)或从浮点类型转换为整数类型时,如果值超出目标类型的范围,可能会导致截断 (truncation) 或数据丢失。
- 整数除法 (Integer Division): 对整数执行浮点除法。
如果除两个整数,Go 会执行整数除法,丢弃余数。
sum := 17count := 5resultInt := sum / count // 整数除法: resultInt 是 3要获得浮点结果,在除法之前将一个或两个操作数转换为浮点类型:
package main
import "fmt"
func main() { var sum int = 17 var count int = 5 var mean float64
// 在除法前将整数转换为 float64 mean = float64(sum) / float64(count) fmt.Printf("Value of mean: %f\n", mean)}输出:
Value of mean: 3.400000- 涉及
byte和rune的转换: 在整数、byte(uint8) 和rune(int32) 之间进行转换。
var char byte = 'A' // byte 是 uint8 的别名var code int = int(char)fmt.Printf("Character: %c, Code: %d\n", char, code) // 输出: Character: A, Code: 65
var r rune = '世' // rune 是 int32 的别名var rCode int = int(r)fmt.Printf("Rune: %c, Code: %d\n", r, rCode) // 输出: Rune: 世, Code: 19990何时不允许转换 (When Conversions Are Not Allowed)
Section titled “何时不允许转换 (When Conversions Are Not Allowed)”不能使用这种基本的转换语法直接在不兼容的类型之间进行转换,例如 int 和 string,或 bool 和 int。对于这些场景,通常使用标准库包 (standard library packages) 中的函数,例如 strconv(用于字符串转换)。
var num int = 100// var str string = string(num) // 编译时错误: cannot convert num (type int) to type string
// 使用 strconv 包的正确方法:import "strconv"var str string = strconv.Itoa(num) // Itoa: 整数转 ASCII (string)fmt.Println(str) // 输出: "100"类型转换是 Go 中用于管理不同表示形式数据同时保持类型安全的基本操作。