go - 如何处理在 switch case 语句中返回两个对象

标签 go

我正在编写类型断言辅助方法,它接受一个 interface{} 并返回 stringmap[string]interface{} .我在 case 语句中返回这两个对象。为什么它要求在函数结束时返回?我错过了休息时间吗?

func typeAssertionHelper(r interface{}) (string, map[string]interface{}) {
    switch g := r.(type) {
    case string:
        return g, nil
    case []interface{}:
        for _, v := range g {
            switch s := v.(type) {
            case string:
                return s, nil
            case map[string]interface{}:
                return "", s
            }
        }
    }
    // missing return end of function
}

最佳答案

传入的 r interface{} 不一定与您在 switch block 中的情况之一匹配。

本质上,switch 并不详尽。

您可以使用默认大小写扩展 switch:

switch g := r.(type) {
 case string:
     ...
 case []interface{}:
     ...
 default:
     ...
}

或者只是在函数末尾返回一些东西

返回 "", nil

关于go - 如何处理在 switch case 语句中返回两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924341/

相关文章:

go - Golang将slice append 到slice的slice上,那么slice会一直影响slice的slice吗?

go - 如何在中间件中获取请求体

sockets - 监听所有 IP 数据包,包括 ICMP、TCP 和 UDP?

go - Go 是否支持 volatile /非 volatile 变量?

go - 我想知道这段代码中的模式和逻辑

go - Go 中的自定义字符串类型

go - 在 Golang 中使用 reflect 将指向通过 interface{} 传入的结构的指针设置为 nil?

go - 使用godoc制作API

interface - 在 Go 中的结构中使用接口(interface)

c++ - Golang 将数组传递给函数并修改它