面试题答案
一键面试- 使用类型断言(Type Assertion):
- 类型断言可以在运行时检查接口值的实际类型,并将其转换为期望的类型。
- 示例:
package main
import (
"fmt"
)
func main() {
var num interface{} = 10.5
if f, ok := num.(float64); ok {
fmt.Printf("转换成功,值为: %f\n", f)
} else {
fmt.Println("转换失败")
}
}
- 使用类型开关(Type Switch):
- 类型开关可以根据接口值的实际类型执行不同的代码块,同时也能进行类型转换。
- 示例:
package main
import (
"fmt"
)
func main() {
var num interface{} = 20
switch v := num.(type) {
case int:
fmt.Printf("类型为int,值为: %d\n", v)
case float64:
fmt.Printf("类型为float64,值为: %f\n", v)
default:
fmt.Println("不支持的类型")
}
}
- 使用自定义转换函数:
- 编写专门的函数来处理类型转换,在函数内部进行必要的检查和转换逻辑。
- 示例:
package main
import (
"fmt"
"strconv"
)
func convertToFloat64(s string) (float64, error) {
num, err := strconv.ParseFloat(s, 64)
if err!= nil {
return 0, err
}
return num, nil
}
func main() {
s := "12.34"
result, err := convertToFloat64(s)
if err!= nil {
fmt.Println("转换错误:", err)
} else {
fmt.Printf("转换成功,值为: %f\n", result)
}
}
- 使用
strconv
包进行字符串与数值类型转换:- 例如将字符串转换为数值时,使用
strconv
包中的函数可以进行安全的转换。 - 示例:
- 例如将字符串转换为数值时,使用
package main
import (
"fmt"
"strconv"
)
func main() {
s := "100"
num, err := strconv.Atoi(s)
if err!= nil {
fmt.Println("转换错误:", err)
} else {
fmt.Printf("转换成功,值为: %d\n", num)
}
}
在处理金融数据时,尤其要注意转换的准确性和可能出现的溢出等问题,这些方法可以帮助规避类型强制转换带来的风险。