Go 语言提供了丰富的基本类型,包括整数类型、浮点数类型、字符串类型、布尔类型等。在编程过程中,常常需要在不同的基本类型之间进行转换。Go 是一种强类型语言,不会自动进行隐式类型转换,因此需要显式地进行类型转换。
整数类型之间的转换
整数类型包括 int
, int8
, int16
, int32
, int64
, 以及它们对应的无符号类型 uint
, uint8
, uint16
, uint32
, uint64
。你可以显式地进行不同整数类型之间的转换:
package main
import (
"fmt"
)
func main() {
var a int = 100
var b int32 = int32(a)
var c int64 = int64(a)
var d uint = uint(a)
fmt.Println(b) // 输出: 100
fmt.Println(c) // 输出: 100
fmt.Println(d) // 输出: 100
}
整数和浮点数之间的转换
整数和浮点数之间的转换需要显式进行:
package main
import (
"fmt"
)
func main() {
var a int = 42
var b float64 = float64(a) // 整数转换为浮点数
var c int = int(b) // 浮点数转换为整数
fmt.Println(b) // 输出: 42.0
fmt.Println(c) // 输出: 42
}
字符串和其他基本类型之间的转换
Go 提供了标准库 strconv
来处理字符串和其他基本类型之间的转换。
字符串转换为整数
package main
import (
"fmt"
"strconv"
)
func main() {
var s string = "123"
n, err := strconv.Atoi(s)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(n) // 输出: 123
}
}
整数转换为字符串
package main
import (
"fmt"
"strconv"
)
func main() {
var n int = 456
var s string = strconv.Itoa(n)
fmt.Println(s) // 输出: "456"
}
字符串转换为浮点数
package main
import (
"fmt"
"strconv"
)
func main() {
var s string = "3.14"
f, err := strconv.ParseFloat(s, 64)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(f) // 输出: 3.14
}
}
浮点数转换为字符串
package main
import (
"fmt"
)
func main() {
var f float64 = 1.618
var s string = fmt.Sprintf("%f", f)
fmt.Println(s) // 输出: "1.618000"
}
布尔类型和字符串之间的转换
字符串转换为布尔类型
package main
import (
"fmt"
"strconv"
)
func main() {
var s string = "true"
b, err := strconv.ParseBool(s)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(b) // 输出: true
}
}
布尔类型转换为字符串
package main
import (
"fmt"
)
func main() {
var b bool = true
var s string = strconv.FormatBool(b)
fmt.Println(s) // 输出: "true"
}
注意事项
- 类型转换需要显式进行:Go 不会自动进行隐式类型转换。
- 可能的精度丢失:在转换过程中,尤其是浮点数和整数之间的转换时,可能会发生精度丢失。
- 错误处理:在字符串和其他基本类型之间的转换时,可能会遇到错误,需要进行错误处理。
通过显式类型转换,Go 程序能够保持类型安全性,减少潜在的类型错误,同时也增加了代码的可读性和维护性。