2 回答
TA贡献1839条经验 获得超15个赞
“Switch”语句提供多路执行。表达式或类型说明符与内部的“case”进行比较
表情开关
在表达式 switch 中,对 switch 表达式求值,而不必为常量的 case 表达式从左到右和从上到下求值;第一个等于 switch 表达式的语句触发相关 case 语句的执行;其他情况被跳过。如果没有 case 匹配并且存在“默认” case,则执行其语句。最多可以有一个默认情况,它可能出现在“switch”语句中的任何地方。缺少 switch 表达式等效于布尔值 true。
ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .
ExprCaseClause = ExprSwitchCase ":" StatementList .
ExprSwitchCase = "case" ExpressionList | "default" .
最后一个switch case子句 ( "connect"and "test") 不属于default case子句。一break在一份声明中switch声明case条款打破了出来switch发言; 它不会脱离周围的 for子句。
您尚未向我们提供可重现的示例:如何创建最小、完整和可验证的示例。. 例如,您没有向我们展示您的输入和输出。
这是一个示例,它按预期工作。default执行该条款是有原因的。
>> test 127.0.0.1 8080
dont print anything else, dont fall through to default. There should be no reason why the default caluse is executed???
Unrecognised command: 127.0.0.1
Unrecognised command: 8080
>>
的价值cmds,fmt.Printf("%q\n", cmds)是["test" "127.0.0.1" "8080\r\n"]。
您的程序逻辑存在严重缺陷。
TA贡献1878条经验 获得超4个赞
尝试strings.Trim()像这样包装 switch 语句的主题:
switch strings.TrimSpace(cmds[i]) {
// your cases
}
但总的来说,在这种情况下,内部 for 循环看起来是错误的构造。基于这段代码,您可能想要删除它,并且只将cmds数组的第一个元素作为switch 语句的主题
- 2 回答
- 0 关注
- 257 浏览
添加回答
举报