no-op /明确无所事事

swi*_*ard 6 go

我有一个类型方法,可以改变类型的字段.它不需要参数,也不会返回任何参数 该方法的大部分是一个switch块.我希望能够通过无操作"短路"出switch块.在我将它重构为类型方法之前,我只是退出了函数,但那就是了.删除案例会破坏方法的逻辑 - default案例会改变状态,如果这种情况匹配,我不想这样做.pass基本上我需要相当于Python的.

码:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 12

与其他语言不同,在Go中,控制流在每个语句处中断,控件不会流入下case一个switch语句,case除非明确地" fallthrough声明"该语句.

并且在case(它可以为空)之后也不需要声明.看这个例子:

i := 3
switch i {
case 3:
case 0:
    fmt.Println("Hello, playground")
}
Run Code Online (Sandbox Code Playgroud)

它即使i==3没有打印也没有任何声明case 3.

与此相同:

i := 3
switch {
case i == 3:
case i == 0:
    fmt.Println("Hello, playground")
}
Run Code Online (Sandbox Code Playgroud)

Go Playground尝试一下.

  • 添加评论"//什么都不做"也是一个很好的做法,以便更清楚地说明在这种情况下我们不需要任何操作. (3认同)