django 網(wǎng)站開發(fā)論文優(yōu)化網(wǎng)站服務(wù)
1.1 簡介
高質(zhì)量:編寫的代碼能否達(dá)到正確可靠、簡潔清晰的目標(biāo)
- 各種邊界條件是否考慮完備
- 異常情況處理,穩(wěn)定性保證
- 易讀易維護(hù)
編程原則
- 簡單性
- 消除多余的重復(fù)性,以簡單清晰的邏輯編寫代碼
- 不理解的代碼無法修復(fù)改進(jìn)
- 可讀性
- 代碼是寫給人看的,并不是機(jī)器
- 編寫可維護(hù)代碼的第一步是確保代碼可讀
- 生產(chǎn)力
- 團(tuán)隊(duì)整體工作效率非常重要
1.2 編碼規(guī)范
如何編寫高質(zhì)量的Go代碼
1.2.1 代碼格式
推薦使用gofmt
自動格式化代碼
主要有兩種:
gofmt
goimports
實(shí)際上等于gofmt
加上依賴包管理,自動增刪依賴包的引用、將依賴包按字母序排序并分類
1.2.2 注釋
注釋的作用
-
解釋代碼作用:適合注釋公共符號
-
解釋代碼如何做的:適合注釋實(shí)現(xiàn)過程
-
解釋代碼實(shí)現(xiàn)的原因:適合解釋代碼的外部因素,提供額外的上下文
-
解釋代碼什么情況會出錯:適合解釋代碼的限制條件
-
公共符合始終要注釋:
- 包中聲明的每個公共的符號、常量、變量、函數(shù)以及結(jié)構(gòu)都需要添加注釋
- 任何公共功能都必須予以注釋
- 庫中的任何函數(shù)都要進(jìn)行注釋
- 不需要注釋實(shí)現(xiàn)接口的方法
1.2.3 命名規(guī)范
變量:
- 簡潔勝于冗長
- 縮略詞全大寫,但是其位于變量開頭且不需要導(dǎo)出時,使用全小寫
- 使用ServerHTTP而不是ServerHttp
- 使用XMLHTTPRequest 或者xmlHTTPRequest
- 變量距離被使用的地方越遠(yuǎn),需要攜帶越多的上下文信息
函數(shù):
- 函數(shù)名不攜帶包名的上下文信息
- 盡量簡短
- 名為foo的包某個函數(shù)返回類型Foo時,可以省略類型信息
- 名為foo的包返回類型T時,可以加入類型信息
package
- 只由小寫字母組成。不包含大寫字母和下劃線等字符
- 簡短并包含一定的上下文信息。例如
schema
、task
等 - 不要與標(biāo)準(zhǔn)庫同名。例如不要使用
sync
或者strings
- 以下規(guī)則盡量滿足,以標(biāo)準(zhǔn)庫包名為例
- 不使用常用變量名作為包名。例如使用
bufio
而不是buf
- 使用單數(shù)而不是復(fù)數(shù)。例如使用
encoding
而不是encodings
- 謹(jǐn)慎地使用縮寫。例如使用
fmt
在不破壞上下文的情況下比format
更加簡短
- 不使用常用變量名作為包名。例如使用
小結(jié)
-
核心目標(biāo)是降低閱讀理解代碼的成本
-
重點(diǎn)考慮上下文信息,設(shè)計簡潔清晰的名稱
1.2.4 控制流程
-
避免嵌套,保證正常流程清晰。比如如果兩個分支都有
return
,那么第二個的else
的應(yīng)當(dāng)省略 -
盡量保持正常代碼路徑為最小縮進(jìn):優(yōu)先處理錯誤或特殊情況,盡早返回或繼續(xù)循環(huán)來減少嵌套
總結(jié)
-
線性原理,處理邏輯盡量走直線,避免復(fù)雜的嵌套分支
-
正常流程代碼沿著屏幕向下移動
-
提高代碼的維護(hù)性和可讀性
-
故障問題大多出現(xiàn)在復(fù)雜的條件/循環(huán)語句里
1.2.5 錯誤和異常處理
簡單錯誤
- 簡單的錯誤指的是僅僅出現(xiàn)一次的錯誤,而且在其他地方不需要捕獲該錯誤
- 優(yōu)先使用
errors.New
來創(chuàng)建匿名變量直接簡單的表示錯誤,如return errors.New("Please input a number")
- 如果有格式化需求,使用
fmt.Errorf
錯誤的Wrap和Unwrap
實(shí)際上是提供了error
嵌套另一個error
的