MST

星途 面试题库

面试题:Go语言接口类型断言在复杂场景下的风险规避

假设有一个接口类型的切片 `interface{}`,其中存储了多种不同类型的值,包括自定义结构体类型、基本数据类型等。在遍历该切片进行类型断言时,如何在保证代码健壮性的同时高效地规避类型断言可能带来的风险?请给出具体代码示例。
33.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

// 定义一个自定义结构体
type CustomStruct struct {
    Name string
}

func main() {
    var data []interface{}
    data = append(data, 10, "hello", CustomStruct{Name: "example"})

    for _, value := range data {
        // 使用类型断言结合类型开关
        switch v := value.(type) {
        case int:
            fmt.Printf("This is an int: %d\n", v)
        case string:
            fmt.Printf("This is a string: %s\n", v)
        case CustomStruct:
            fmt.Printf("This is a CustomStruct: %+v\n", v)
        default:
            fmt.Printf("Unrecognized type\n")
        }
    }
}

通过类型开关进行类型断言,这样可以在一次遍历中处理多种类型,且在类型不匹配时通过 default 分支进行处理,保证了代码的健壮性,同时这种方式在 Go 语言中也是较为高效的处理方式。