package main
import (
"fmt"
"time"
)
func main() {
switch time.Now().Weekday().String() {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
fmt.Println("it is time to work")
fmt.Println(time.Now().Weekday().String())
default:
fmt.Println(time.Now().Weekday().String())
}
}

从switch语句调用函数时,无需更改表达式即可修改其逻辑,因为你始终会验证函数返回的内容。
package main
import (
"fmt"
"regexp"
)
func main() {
var email = regexp.MustCompile(`^[^@]+@[^@.]+\.[^@.]+`)
var phone = regexp.MustCompile(`^[0-9][0-9]+`)
contact := "foo@bar.cc"
// contact := strconv.Itoa(234)
fmt.Printf("%T\n", contact)
switch {
case email.MatchString(contact):
fmt.Println(contact, "is an email")
case phone.MatchString(contact):
fmt.Println(contact, "is an phone number")
default:
fmt.Println(contact, "is not recognized")
}
}

package main
import (
"fmt"
"regexp"
"strconv"
)
func main() {
var email = regexp.MustCompile(`^[^@]+@[^@.]+\.[^@.]+`) //非@开头,@连接后,.连接后面没有@出现大于1次
var phone = regexp.MustCompile(`^[0-9][0-9]+`)// 数字开头
// contact := "foo@bar.cc"
contact := strconv.Itoa(234) //转换int到string, strconv.Itoa() strconv.Atoi()
fmt.Printf("%T\n", contact)
switch {
case email.MatchString(contact):
fmt.Println(contact, "is an email")
case phone.MatchString(contact):
fmt.Println(contact, "is an phone number")
default:
fmt.Println(contact, "is not recognized")
}
}
可以在switch中省略条件
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())//随机种子
r := rand.Float64()
fmt.Println(r)
switch {
case r > 0.1:
fmt.Println(" 99% of the time")
default:
fmt.Println(" 1% of the time")
}
}

在某些编程语言中,你会在每个case语句结尾写一个break关键字。go中当逻辑进入某个case时它会退出switch。若要使逻辑进入到下一个紧邻的case,可以使用fallthrough
package main
import (
"fmt"
)
func main() {
switch num := 15; {
case num < 50:
fmt.Printf("%d is less than 50\n", num)
fallthrough
case num > 100:
fmt.Printf("%d is greater than 100\n", num)
case num < 200:
fmt.Printf("%d is less than 200\n", num)
}
}