42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
func main() {
|
|
// 基本类型转换
|
|
var a int = 10
|
|
var b float64 = float64(a) // 安全转换
|
|
var c int = int(b + 0.9) // 丢失精度,c=10
|
|
fmt.Printf("a=%d, b=%.1f, c=%d\n", a, b, c) // 输出a=10, b=10.0, c=10
|
|
|
|
// 字符串与字节/符文切片转换
|
|
s := "中文"
|
|
bytes := []byte(s) // 转为字节切片(UTF-8编码,"中"占3字节)
|
|
runes := []rune(s) // 转为符文切片(每个字符对应一个rune)
|
|
fmt.Printf("s bytes: %x, s runes: %c\n", bytes, runes) // 输出s bytes: e4b8ade69687, s runes: [中 文]
|
|
|
|
// 数组转切片
|
|
arr := [3]int{1, 2, 3}
|
|
slice := arr[:]
|
|
fmt.Println("数组转切片:", slice) // 输出数组转切片: [1 2 3]
|
|
|
|
// 接口类型断言(多值形式)
|
|
var i interface{} = "hello"
|
|
if str, ok := i.(string); ok {
|
|
fmt.Printf("i is string: %s\n", str) // 输出i is string: hello
|
|
} else if num, ok := i.(int); ok {
|
|
fmt.Printf("i is int: %d\n", num)
|
|
} else {
|
|
fmt.Println("i is unknown type")
|
|
}
|
|
|
|
// 接口类型断言(单值形式,需确保类型正确)
|
|
var j interface{} = 100
|
|
num := j.(int)
|
|
fmt.Printf("j is int: %d\n", num) // 输出j is int: 100
|
|
|
|
// 错误示例(断言失败)
|
|
str := j.(string) // 报错:panic: interface conversion: interface {} is int, not string
|
|
fmt.Println(str)
|
|
}
|