- 我不使用的關鍵字golang
我不用 goto編程
goto 會讓代碼執行邏輯難以閱讀和理解。優化
另外還可使用 label 標記來組織代碼code
func main() { outer: for { log.Println("outer") for { log.Println("inner") break outer } } }
golang 的 switch 足夠好用,不須要用 fallthrough 退化到其餘語言的模式。ip
我不用 elseit
大部分的 else 能夠用反轉判斷來實現。例如:class
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