– 我不使用的關鍵字
-
我不用 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