面试题答案
一键面试package main
import (
"fmt"
)
func handleSlice(slice []interface{}) []interface{} {
result := make([]interface{}, len(slice))
for i, v := range slice {
switch v := v.(type) {
case int:
result[i] = v * v
case string:
result[i] = fmt.Sprintf("%s", upperString(v))
case map[string]interface{}:
if name, ok := v["name"]; ok {
result[i] = fmt.Sprintf("%v", name)
}
}
}
return result
}
func upperString(s string) string {
var result string
for _, char := range s {
if char >= 'a' && char <= 'z' {
result += string(char - 32)
} else {
result += string(char)
}
}
return result
}
你可以通过如下方式调用这个函数:
func main() {
slice := []interface{}{1, "hello", map[string]interface{}{"name": "John"}}
result := handleSlice(slice)
fmt.Println(result)
}
上述代码实现了以下功能:
handleSlice
函数接受一个[]interface{}
类型的切片,遍历切片中的每个元素,使用类型断言判断元素类型,并根据不同类型进行相应处理。- 对于
int
类型元素,计算其平方。 - 对于
string
类型元素,将其转换为大写。 - 对于
map[string]interface{}
类型元素,检查是否存在name
键,如果存在则将对应的值转换为字符串。 - 最后将处理后的结果存放在一个新的切片中返回。
upperString
函数将字符串转换为大写。在main
函数中演示了handleSlice
函数的使用。