– 我不使用的关键字
我不用 goto
goto 会让代码执行逻辑难以阅读和理解。
另外还可以使用 label 标记来组织代码
func main() { outer: for { log.Println("outer") for { log.Println("inner") break outer } } }
- 我不用 fallthrough
golang 的 switch 足够好用,不需要用 fallthrough 退化到其他语言的模式。
我不用 else
大部分的 else 可以用反转判断来实现。例如:
if something.OK() { something.Lock() defer something.Unlock() err := something.Do() if err == nil { stop := StartTimer() defer stop() log.Println("working...") doWork(something) <-something.Done() // wait for it log.Println("finished") return nil } else { return err } } else { return errors.New("something not ok") } // // *守护式编程* // 上面的代码可以用反转判断来优化。 if !something.OK() { // flipped return errors.New("something not ok") } something.Lock() defer something.Unlock() err := something.Do() if err != nil { // flipped return err } stop := StartTimer() defer stop() log.Println("working...") doWork(something) <-something.Done() // wait for it log.Println("finished") return nil