duanbai1974 2018-03-04 18:29
浏览 27
已采纳

布尔开关,带逗号vs或[关闭]

I know that in Go, you can switch with conditions as the case statements like this:

func ctypeAlpha(b byte) bool {
    return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z')
}

switch {
case ctypeAlpha(mysql[i]):
    ...
case mysql[i] == '"' || mysql[i] == '\'' || mysql[i] == '`':
    ...

But in learning that cases break implicitly, and that to have multiple matches execute the same code, you can use commas like this

switch {
case ctypeAlpha(mysql[i]):
    ...
case mysql[i] == '"', mysql[i] == '\'', mysql[i] == '`':
    ... 

Personal opinions aside, which is preferred for performance?

  • 写回答

1条回答 默认 最新

  • dousi0144 2018-03-04 18:49
    关注

    None of the above. For example,

    package main
    
    import "fmt"
    
    func isAlpha(b byte) bool {
        return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z')
    }
    
    func isPunct(b byte) bool {
        return b == '"' || b == '\'' || b == '`'
    }
    
    func main() {
        i := 1
        mysql := make([]byte, i+1)
        mysql[i] = 'A'
    
        switch b := mysql[i]; {
        case isAlpha(b):
            fmt.Printf("isAlpha(%c)
    ", b)
        case isPunct(b):
            fmt.Printf("isPunct(%c
    ", b)
        }
    }
    

    Playground: https://play.golang.org/p/9SVWBExm9Xj

    Output:

    isAlpha(A)
    

    Note:

    -gcflags='-m'
    
    inlining call to isAlpha
    inlining call to isPunct
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致