我有一个改变类型字段的类型方法。它不需要参数,也不会返回任何参数该方法的大部分是switch
块。我希望能够通过no-op从switch
块中“短路”。在我将它重构为类型方法之前,我只是退出了函数,但那就是了。删除案例会破坏方法的逻辑 - default
案例会改变状态,如果匹配这种情况,我不想这样做。我基本上需要相当于Python的pass
。
代码:
func (parser *Parser) endSectionName () {
state = parser.State
buffer = parser.buffer
results = parser.results
switch {
case state.HasFlag(IN_ESCAPED) {
// ???
}
case !inSection(state) {
return state, NotInSectionError
}
case !state.HasFlag(IN_SECTION_NAME) {
state.Reset()
return state, errors.New("Parsing error: Not in section name")
}
default {
state.RemoveFlag(IN_SECTION_NAME)
s := buffer.String()
results[s] = new(Section)
buffer.Reset()
return state, nil
}
}
}
答案 0 :(得分:9)
与其他语言不同,在Go中,控件流在switch
语句的每个case
处中断,除非明确“询问”,否则控件不会流入下一个case
适用于fallthrough
声明。
case
之后也不需要声明(它可以为空)。见这个例子:
i := 3
switch i {
case 3:
case 0:
fmt.Println("Hello, playground")
}
即使i==3
也没有打印,case 3
之后也没有声明。
与此相同:
i := 3
switch {
case i == 3:
case i == 0:
fmt.Println("Hello, playground")
}
在Go Playground上尝试。