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

Uber 把公司內(nèi)部的《Go 語言風(fēng)格指南》開源了

新聞 前端
Uber 近日開放了其公司內(nèi)部使用的《Go 語言風(fēng)格指南》。根據(jù)Uber的介紹,《Go 語言風(fēng)格指南》是支配Uber代碼的慣例,這些慣例不僅涵蓋源文件格式,而且由gofmt代替處理。

 Uber 近日開放了其公司內(nèi)部使用的《Go 語言風(fēng)格指南》。

Uber 把公司内部的《Go 语言风格指南》开源了

根據(jù)Uber的介紹,《Go 語言風(fēng)格指南》是支配Uber代碼的慣例,這些慣例不僅涵蓋源文件格式,而且由gofmt代替處理。(gofmt工具可以幫助開發(fā)者格式化他們的代碼到統(tǒng)一的風(fēng)格。)

本指南通過詳細(xì)介紹了Uber在編寫Go代碼時(shí)的注意事項(xiàng),從而使代碼庫更加易于管理,幫助開發(fā)者們更好的使用Go的語言特性

該指南最初由Prashant Varanasi和Simon Newton編寫,目的是使一些同事快速使用Go。多年來,已根據(jù)其他人的反饋進(jìn)行了多次的修改。

其中許多約定是 Go 的通用準(zhǔn)則,而其它準(zhǔn)則則參考了外部資源:

  • Effective Go
  • The Go common mistakes guide

所用的代碼在運(yùn)行 golint 和 go vet 之后不會(huì)有報(bào)錯(cuò)。建議將編輯器設(shè)置為:

  • 保存時(shí)運(yùn)行 goimports
  • 運(yùn)行 golint 和 go vet 來檢查錯(cuò)誤

下面以接口和指針為例

你幾乎不需要指向接口的指針,你應(yīng)該把接口當(dāng)作值傳遞,它的基礎(chǔ)數(shù)據(jù)仍然可以當(dāng)成一個(gè)指針。

一個(gè)接口是兩個(gè)字段:

1、指向特定類型信息的指針。你可以認(rèn)為這是 "type."。

2、數(shù)據(jù)指針,如果存儲(chǔ)的數(shù)據(jù)是指針,則直接存儲(chǔ)。如果數(shù)據(jù)存儲(chǔ)的是值,則存儲(chǔ)指向此值的指針。

如果要接口方法修改基礎(chǔ)數(shù)據(jù),則必須使用指針。

接收器和接口

具有值接收器的方法可以被指針和值調(diào)用。例如:

  1. type S struct { 
  2.   data string 
  3.  
  4. func (s S) Read() string { 
  5.   return s.data 
  6.  
  7. func (s *S) Write(str string) { 
  8.   s.data = str 
  9.  
  10. sVals := map[int]S{1: {"A"}} 
  11.  
  12. // You can only call Read using a value 
  13. sVals[1].Read() 
  14.  
  15. // This will not compile: 
  16. //  sVals[1].Write("test") 
  17.  
  18. sPtrs := map[int]*S{1: {"A"}} 
  19.  
  20. // You can call both Read and Write using a pointer 
  21. sPtrs[1].Read() 
  22. sPtrs[1].Write("test"

同樣,即使該方法具有值接收器,也可以通過指針來滿足接口。

  1. type F interface { 
  2.   f() 
  3.  
  4. type S1 struct{} 
  5.  
  6. func (s S1) f() {} 
  7.  
  8. type S2 struct{} 
  9.  
  10. func (s *S2) f() {} 
  11.  
  12. s1Val := S1{} 
  13. s1Ptr := &S1{} 
  14. s2Val := S2{} 
  15. s2Ptr := &S2{} 
  16.  
  17. var i F 
  18. i = s1Val 
  19. i = s1Ptr 
  20. i = s2Ptr 
  21.  
  22. // The following doesn't compile, since s2Val is a value, and there is no value receiver for f. 

Effective Go對(duì)Pointers vs. Values分析的不錯(cuò)

Uber 把公司内部的《Go 语言风格指南》开源了

目前,guide在Github上標(biāo)星2.9K,獲得246個(gè)Fork(Github地址:https://github.com/uber-go/guide/blob/master/style.md)

 

 

 

 

責(zé)任編輯:張燕妮 來源: 開源最前線
相關(guān)推薦

2015-12-31 13:56:09

創(chuàng)業(yè)

2022-12-05 09:32:29

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

2016-11-09 13:52:33

內(nèi)部數(shù)據(jù)KPI

2016-11-09 15:36:19

數(shù)據(jù)平臺(tái)大數(shù)據(jù)

2021-05-06 11:04:55

GooglePython代碼

2015-11-03 10:17:11

Dynatrace

2009-06-23 10:03:44

暴雪內(nèi)部圖片

2024-01-25 08:32:34

OpenAI人工智能AI

2013-02-25 12:21:18

2022-11-28 08:15:14

Go語言代碼

2021-05-13 18:53:34

Go編譯器Uber

2022-03-04 08:45:11

Docker開源Linux

2022-03-25 21:57:49

匯編Go語言

2021-03-26 09:40:46

黑客攻擊信息安全

2020-08-20 15:55:00

MySQL數(shù)據(jù)庫使用規(guī)范

2010-05-25 15:21:29

思科網(wǎng)真

2012-12-06 15:31:48

英特爾CEO歐德寧

2016-10-28 22:22:35

nodenode.jsdocker

2021-11-08 07:48:48

Go語言對(duì)象

2022-04-18 10:36:48

社交軟件聊天平臺(tái)rocket.cha
點(diǎn)贊
收藏

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