no-op /明确无所事事

时间:2015-04-21 14:56:08

标签: go

我有一个改变类型字段的类型方法。它不需要参数,也不会返回任何参数该方法的大部分是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
        }
    }
}

1 个答案:

答案 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上尝试。