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?
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