// 使用一个int控制N个开关,参考 sync.Mutex state 字段状态记录方式
type IntSwitch struct {
state int32
}
// 枚举定义
const (
switchFirst = 1 << iota // 十进制跟二进制都为1
switchSecond // 十进制:2 二进制:10
switchThird // 十进制:4 二进制:100
)
// 条件判断
data := IntSwitch{state: 7}
if data.state & switchThird == switchThird { // 比对最高一位
fmt.Println("第三个开关为打开状态")
}
// 数据获取
fmt.Printf("第三个开关的状态为:%d", (data.state & switchThird) >> 2)
name := ""
switch platform {
case "Android":
name = "西红柿"
case "iOS":
name = "番茄"
default:
return fmt.Errorf("该不会是%s吧", "圣女果")
}
// 条件赋值巧用 map 来声明
name, ok := map[string]string{
"Android": "西红柿",
"iOS": "番茄",
}[platform]
if !ok {
return fmt.Errorf("该不会是%s吧", "圣女果")
}
// 使用泛型实现类似PHP的in_array
// comparable 为可比较的类型
func In[T comparable](needle T, haystack []T) bool {
for _, item := range haystack {
if item == needle {
return true
}
}
return false
}
name := "猕猴桃"
if In(name, []string{"猕猴桃", "奇异果"}) {
// code ...
}
// 两阶段延迟执行
// 可用于创建对象、释放对象,或者执行两阶段的逻辑
func TrackTime() func() {
pre := time.Now()
return func() {
elapsed := time.Since(pre)
fmt.Println("elapsed:", elapsed)
}
}
func main() {
defer TrackTime()()
time.Sleep(500 * time.Millisecond)
}