最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下。

注意这里讨论的不是typed switch,也就是case语句后面是类型的那种。

直接看代码:

func (s *systemd) Status() (Status, error) {
exitCode, out, err := s.runWithOutput(\"systemctl\", \"is-active\", s.unitName())
if exitCode == 0 && err != nil {
return StatusUnknown, err
} switch {
case strings.HasPrefix(out, \"active\"):
return StatusRunning, nil
case strings.HasPrefix(out, \"inactive\"):
// inactive can also mean its not installed, check unit files
exitCode, out, err := s.runWithOutput(\"systemctl\", \"list-unit-files\", \"-t\", \"service\", s.unitName())
if exitCode == 0 && err != nil {
return StatusUnknown, err
}
if strings.Contains(out, s.Name) {
// unit file exists, installed but not running
return StatusStopped, nil
}
// no unit file
return StatusUnknown, ErrNotInstalled
case strings.HasPrefix(out, \"activating\"):
return StatusRunning, nil
case strings.HasPrefix(out, \"failed\"):
return StatusUnknown, errors.New(\"service in failed state\")
default:
return StatusUnknown, ErrNotInstalled
}
}

你也可以在这找到它:代码链接

简单解释下这段代码在做什么:调用systemctl命令检查指定的服务的运行状态,具体做法是过滤systemctl的输出然后根据得到的字符串的前缀判断当前的运行状态。

有意思的在于这个switch,首先它后面没有任何表达式;其次在每个case后面都是个函数调用表达式,返回值都是bool类型的。

虽然看起来很怪异,但这段代码肯定没有语法问题,可以编译通过;也没有语义或者逻辑问题,因为人家用的好好的,这个项目接近4000个星星不是大家乱点的。

这里就不卖关子了,直接公布答案:

ICP+EDI电信增值业务许可证申请审核网站源码

扫码联系技术微信【备注:站媒体网】
客服QQ:137483024