自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 語言代碼風(fēng)格規(guī)范-概述篇

開發(fā) 前端
各 Go 程序員之間,以及各團(tuán)隊的代碼庫之間總會存在差異。然而,為了符合 Google 和 Alphabet 的最大利益,我們的代碼庫盡可能得保持一致,因此,請自由地對你認(rèn)為合適的編碼風(fēng)格進(jìn)行改進(jìn),發(fā)現(xiàn)不符合風(fēng)格規(guī)范的行為時,你也不需要過于吹毛求疵。

?每門開發(fā)語言都會有其特有的風(fēng)格規(guī)范(亦或指南),開發(fā)者遵循規(guī)范能帶來顯著收益,有效促進(jìn)團(tuán)隊協(xié)作、減少 bug 錯誤、降低維護(hù)成本等。

Google 開源的 Google Style Guides (?https://google.github.io/styleguide/?)為多種編程語言提供了風(fēng)格規(guī)范,包括 C++、Java、Python、JavaScript 等。在 2022 年 11 月,Go 語言風(fēng)格規(guī)范(?https://google.github.io/styleguide/go/index)也終于得到開源。

如果你所在的團(tuán)體還未形成一套系統(tǒng)的 Go 風(fēng)格規(guī)范,不妨參考這份指南。

本公眾號將持續(xù)更新該規(guī)范的中文譯本。本文以下內(nèi)容將是該系列的第一部分,即【概述篇】。

關(guān)于

Go 語言風(fēng)格規(guī)范和附錄文檔整理了當(dāng)前編寫易讀且正宗的 Go 的最佳方法。遵循編程指南不是絕對的,因為這些文檔不可能面面俱到。我們的目的是盡可能減少編寫可讀性 Go 代碼試錯成本,新手們可以避免常見錯誤。這份規(guī)范還為那些在 Google 內(nèi)部 Go 代碼審查的人提供統(tǒng)一的風(fēng)格指導(dǎo)。

文檔

鏈接

主要受眾

規(guī)范的

權(quán)威的

指南

?https://google.github.io/styleguide/go/guide?

所有人



決策

?https://google.github.io/styleguide/go/decisions?

代碼可讀性審查者



最佳實踐

?https://google.github.io/styleguide/go/best-practices?

任何感興趣的人



文檔

1.【指南篇】概述了 Google Go 代碼風(fēng)格的基礎(chǔ)。該文檔是權(quán)威的,并用作【決策篇】和【最佳實踐篇】中建議的依據(jù)。

2.【決策篇】是一個更詳細(xì)的文檔,它總結(jié)了關(guān)于特定風(fēng)格點的決策,并適當(dāng)?shù)赜懻摿诉@些決策背后的原因。

這些決策可能會因為新數(shù)據(jù)類型、新語言特性、新標(biāo)準(zhǔn)庫或新的模型而改變,但我們并不需要 Google 的 Go 程序員與該文檔實時一致。

3.【最佳實踐篇】記錄了一些隨著時間的推移而演變的模式,這些模式解決了常見問題,易于閱讀,高魯棒性也滿足了代碼可維護(hù)性要求。

這些最佳實踐并不權(quán)威,但我們鼓勵 Google 的 Go 程序員盡可能使用它們,以保持代碼庫的統(tǒng)一。

這些文檔的目的:

  • 就權(quán)衡可替代編碼風(fēng)格的一套原則達(dá)成一致。
  • 編纂 Go 編碼風(fēng)格已解決的問題。
  • 記錄并提供正宗 Go 代碼的規(guī)范示例。
  • 記錄各種編碼風(fēng)格決策的利弊。
  • 幫助減少 Go 可讀性代碼審查中的意外。
  • 幫助代碼可讀性代碼審查者使用一致的術(shù)語和指南。

非這些文檔的目的:

  • 成為代碼可讀性審查者在代碼評論下的詳盡清單。
  • 列出所有規(guī)則,并希望每個人都記住并始終遵守。
  • 失去對語言特性和風(fēng)格使用的良好判斷。
  • 為消除代碼風(fēng)格差異而成為大規(guī)模修改的借口。

各 Go 程序員之間,以及各團(tuán)隊的代碼庫之間總會存在差異。然而,為了符合 Google 和 Alphabet 的最大利益,我們的代碼庫盡可能得保持一致,因此,請自由地對你認(rèn)為合適的編碼風(fēng)格進(jìn)行改進(jìn),發(fā)現(xiàn)不符合風(fēng)格規(guī)范的行為時,你也不需要過于吹毛求疵。特別是,這些文檔可能會隨著時間而改變,它不應(yīng)該是導(dǎo)致現(xiàn)有代碼庫需要額外改動的理由;使用最新的最佳實踐去編寫新代碼就足夠了,隨著時間的推移這部分內(nèi)容就已經(jīng)被解決了。

重要的是要認(rèn)識到代碼風(fēng)格問題本質(zhì)上是個人的,并且總是存在固有的權(quán)衡。這些文檔中的大部分指導(dǎo)都是主觀的,但就像gofmt一樣,它們提供的統(tǒng)一性具有重要價值。因此,這些編碼風(fēng)格建議不會在未經(jīng)適當(dāng)討論的情況下修改。我們鼓勵 Google 的 Go 程序員遵循這些編程風(fēng)格規(guī)范,即使他們可能對某些內(nèi)容并不同意。

定義

整個代碼風(fēng)格系列文檔中使用的一些詞語,定義如下

Canonical(權(quán)威的):建立規(guī)范且持久的規(guī)則。

在這些文檔中,“權(quán)威的”用于描述被認(rèn)為是所有代碼(舊的和新的)都應(yīng)該遵循的標(biāo)準(zhǔn),并且語句不會隨著時間的推移而發(fā)生重大變化。權(quán)威的文檔中的原則應(yīng)該被代碼作者和審查人理解,權(quán)威的文檔中包含的所有內(nèi)容都必須達(dá)到高標(biāo)準(zhǔn)。因此,與非權(quán)威的文檔相比,權(quán)威的文檔通常更短,并且規(guī)定的代碼風(fēng)格元素也更少。

https://google.github.io/styleguide/go#canonical

Normative(規(guī)范的):旨在建立一致性。

在這些文檔中,“規(guī)范的”用于描述 Go 代碼審查者都同意的代碼風(fēng)格元素,以確保他們在提供建議、術(shù)語和理由時能保持一致。這些風(fēng)格元素可能會隨著時間的推移而發(fā)生變化,這些文檔將反映這些變化,以便代碼審查者可以保持一致與最新。Go 代碼開發(fā)者不用熟悉這些規(guī)范性文檔,但這些文檔應(yīng)該被代碼審查者用作可讀性審查的參考。

https://google.github.io/styleguide/go#normative

Idiomatic(正宗的):常見且熟悉的。

在這些文檔中,“正宗的”用于指代 Go 代碼中普遍存在的東西,并已成為一種易于識別的熟悉模式。一般而言,如果兩種模式在上下文中起到相同的目的,那么正宗的模式應(yīng)該優(yōu)先于非正宗的模式,因為這是代碼讀者最熟悉的模式。

https://google.github.io/styleguide/go#idiomatic

附加參考

本指南假定讀者熟悉 Effective Go(?https://go.dev/doc/effective_go),因為它為整個 Go 社區(qū)的 Go 代碼提供了一個共同的基線。

下面是一些額外的資源,供那些希望自學(xué) Go 代碼風(fēng)格的人,和為代碼審查者提供更多能使用的評論意見依據(jù)鏈接。我們并不期望 Go 代碼可讀性的參與者熟悉這些資源,但他們可能會作為代碼可讀性審查的背景出現(xiàn)。

外部參考

  • [Go 語言規(guī)范] https://go.dev/ref/spec
  • [Go 高頻問題問答] https://go.dev/doc/faq
  • [Go內(nèi)存模型] https://go.dev/ref/mem
  • [Go數(shù)據(jù)結(jié)構(gòu)] https://research.swtch.com/godata
  • [Go接口] https://research.swtch.com/interfaces
  • [Go諺語] https://go-proverbs.github.io/
  • Go 小技巧 - 敬請關(guān)注.

相關(guān)的“廁所測試“文檔

  • [TotT: Identifier Naming] https://testing.googleblog.com/2017/10/code-health-identifiernamingpostforworl.html
  • [TotT: Testing State vs. Testing Interactions] https://testing.googleblog.com/2013/03/testing-on-toilet-testing-state-vs.html
  • [TotT: Effective Testing] https://testing.googleblog.com/2014/05/testing-on-toilet-effective-testing.html
  • [TotT: Risk-driven Testing] https://testing.googleblog.com/2014/05/testing-on-toilet-risk-driven-testing.html
  • [TotT: Change-detector Tests Considered Harmful] https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html

額外的外部著作

  • [Go教條] https://research.swtch.com/dogma
  • [少即是多] https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html
  • [埃斯梅拉達(dá)的想象力] https://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html
  • [用于解析的正則表達(dá)式] https://commandcenter.blogspot.com/2011/08/regular-expressions-in-lexing-and.html
  • [Gofmt 的風(fēng)格沒有人喜歡,但 Gofmt 卻是每個人的最愛] https://www.youtube.com/watch?v=PAAkCSZUG1c&t=8m43s (YouTube)?
責(zé)任編輯:武曉燕 來源: Golang技術(shù)分享
相關(guān)推薦

2022-12-05 09:32:29

Go 語言風(fēng)格規(guī)范

2021-11-08 07:48:48

Go語言對象

2022-05-09 10:36:05

PythonPyScript開發(fā)者

2020-03-18 15:54:41

開發(fā)效率代碼

2022-01-17 07:50:37

Go代碼規(guī)范

2020-11-23 08:54:14

Go語言結(jié)構(gòu)體

2020-11-30 06:17:03

Go語言

2020-11-26 06:40:24

Go語言基礎(chǔ)

2020-12-02 08:45:36

Go語言

2015-07-16 13:57:06

移動web開發(fā)規(guī)范

2019-10-15 14:16:45

編程語言Go 開發(fā)

2012-03-22 17:16:24

Java

2021-06-24 06:35:00

Go語言進(jìn)程

2022-06-29 09:19:09

靜態(tài)代碼C語言c代碼

2023-11-22 08:00:56

Go命名規(guī)范

2013-06-06 10:10:59

項目項目代碼代碼風(fēng)格

2017-07-10 14:58:23

JavaScript代碼風(fēng)格寫作準(zhǔn)則

2018-03-12 22:13:46

GO語言編程軟件

2023-12-05 07:14:27

AIGo

2021-11-15 10:29:39

Go語言類型
點贊
收藏

51CTO技術(shù)棧公眾號