类型转换(Type Conversion)
- 主要区别:类型转换是显式地将一种类型的值转换为另一种类型。它用于在不同类型之间进行数据的强制转换,前提是这些类型之间存在合理的转换规则。在编译时就确定转换是否合法。
- 使用场景举例:在数值类型之间的转换,比如将
int
转换为float64
以进行更精确的数值计算。
package main
import (
"fmt"
)
func main() {
var num int = 10
var result float64
result = float64(num) * 1.5
fmt.Println(result)
}
类型断言(Type Assertion)
- 主要区别:类型断言用于在运行时检查接口值的动态类型,并将接口值转换为具体类型。它操作的对象是接口类型的值,并且在运行时才会判断断言是否成功,如果断言失败会导致程序运行时错误(
panic
),除非使用带检测的断言形式。
- 使用场景举例:当你有一个接口类型的变量,需要根据其实际类型进行不同的处理时。比如在一个函数中传入了一个接口类型参数,该参数可能是不同类型的值,通过类型断言来判断实际类型并做相应处理。
package main
import (
"fmt"
)
func main() {
var i interface{} = "hello"
s, ok := i.(string)
if ok {
fmt.Println("It's a string:", s)
} else {
fmt.Println("Not a string")
}
}