MST

星途 面试题库

面试题:Go语言函数签名与类型断言在复杂数据结构中的应用

给定一个切片`[]interface{}`,里面可能包含`int`、`string` 、`map[string]interface{}`类型的数据。编写一个函数,函数签名为`func handleSlice(slice []interface{})`,使用类型断言对切片中的每个元素进行判断和处理。如果是`int`类型,将其平方;如果是`string`类型,将其转换为大写;如果是`map[string]interface{}`类型,检查其中是否存在键`name`,如果存在则将对应的值转换为字符串并打印。最后返回处理后的结果(可以以合适的数据结构返回)。
14.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
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)
}

上述代码实现了以下功能:

  1. handleSlice函数接受一个[]interface{}类型的切片,遍历切片中的每个元素,使用类型断言判断元素类型,并根据不同类型进行相应处理。
  2. 对于int类型元素,计算其平方。
  3. 对于string类型元素,将其转换为大写。
  4. 对于map[string]interface{}类型元素,检查是否存在name键,如果存在则将对应的值转换为字符串。
  5. 最后将处理后的结果存放在一个新的切片中返回。
  6. upperString函数将字符串转换为大写。在main函数中演示了handleSlice函数的使用。