Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang类型开关需要(冗余)类型断言_Go - Fatal编程技术网

Golang类型开关需要(冗余)类型断言

Golang类型开关需要(冗余)类型断言,go,Go,我想使用调用特定于类型的解析函数 包干管 进口 fmt func main{ 变量值接口{} value=我是一个字符串 开关v:=value.type{ 大小写字符串: parseStringvalue 违约: fmt.PrintfI不知道类型%t!\n,v } } 函数解析字符串{ 打印格式 } 但是,由于缺少一个: 无法将值类型接口{}用作parseString:需要类型断言的参数中的类型字符串 添加类型断言可修复此错误 包干管 进口 fmt func main{ 变量值接口{} valu

我想使用调用特定于类型的解析函数

包干管 进口 fmt func main{ 变量值接口{} value=我是一个字符串 开关v:=value.type{ 大小写字符串: parseStringvalue 违约: fmt.PrintfI不知道类型%t!\n,v } } 函数解析字符串{ 打印格式 } 但是,由于缺少一个:

无法将值类型接口{}用作parseString:需要类型断言的参数中的类型字符串

添加类型断言可修复此错误

包干管 进口 fmt func main{ 变量值接口{} value=我是一个字符串 开关v:=value.type{ 大小写字符串: s、 确定:=value.string 如果可以的话{ 解析字符串 } 违约: fmt.PrintfI不知道类型%t!\n,v } } 函数解析字符串{ 打印格式 } 但这感觉是多余的。我现在检查两次,该值是否为字符串

我应该在类型开关和类型断言之间进行选择吗?也许有一种不那么多余的方法可以做到这一点?这个例子是人为的。可能有很多类型,这就是为什么类型开关看起来像是干净的解决方案…直到我开始添加类型资产

使现代化 这个问题已获得多张反对票。我认为这忽略了Go的type switch令人困惑的本质,它最初看起来好像打开的值是类型,而不是值

开关v:=value.type{ 大小写字符串: // ... 案例int: // ... }
我是新手,错误地认为v是我喜欢的类型。如果我第一次编写Go时遇到这个问题,其他人也可能会遇到这个问题?

使用您在开关中声明的值:

   switch v := value.(type) {
    case string:
        // v is string here
        parseString(v)
    ...

使用v from开关v:=value.type@volker谢谢。我已经更新了我的问题,解释了为什么我错过了这个显而易见的解决方案。这一点在中有介绍,所以它不太可能打扰很多人,因为这次旅行是语言介绍。