成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 里的海勒姆定律?非必要不修改......

開發 前端
“海勒姆定律” 和 Go 源碼中的 “被動實踐” 都很好的印證了。只要你開放出去的東西,無論是接口,又或是參數。都有可能神不知鬼不覺中被用戶依賴了。

大家好,我是煎魚。

在我們日常工作中,只要你維護過歷史比較悠久的項目??倳龅揭恍┥衿娴拇a。其中最莫過于在老代碼上,前人讓你不要改這塊邏輯的注釋。

在 Go 中也有一些約定俗成的代碼。周末看到了還有點意思,分享給大家。

“該文本不可變更”

在 net/http 標準庫中,有以下這段代碼:

func (e *MaxBytesError) Error() string {
 // Due to Hyrum's law, this text cannot be changed.
 return "http: request body too large"
}

注意看上面的注釋:“Due to Hyrum's law, this text cannot be changed.”。翻譯過來中文含義是:根據海勒姆定律,此文本不可更改。

大家看到可能會犯迷糊。海勒姆定律是什么?教科書上可沒有教過這玩意。

海勒姆定律是什么

海勒姆定律(Hyrum's Law) 是一種軟件開發領域的概念。由 Google 工程師 Hyrum Wright 提出,他在一次演講中討論接口設計和演化問題時提出了這一觀察并得到了驗證。

核心描述是:

  • 無論接口的官方文檔或開發者如何嚴格定義接口的行為,接口的實際行為都會影響其用戶。
  • 所有可能的用戶依賴接口實際行為的方式,最終都會受到接口的實現約束,而不僅僅是其文檔描述。

簡單來講,接口的所有行為,無論是顯式定義的還是隱式存在的,都會被用戶依賴。

即便某些行為不是接口規范的一部分,只要接口表現出了某種行為,使用它的系統或代碼可能就會開始依賴這種行為。

Go 源碼中的案例

結合前面的案例來看,原作者意識到錯誤消息無法隨意更改,因為可能有某些地方的某些用戶依賴于該錯誤消息。

雖然調整錯誤消息看起來微不足道,但這種改動可能會對依賴這一特定消息的用戶造成意想不到的問題。

這種情況下,一個看似無關緊要的描述修改:"http: request body too large",可能會導致用戶的業務代碼的中斷。從而影響 Go1 的兼容性保障和程序運行。

那 Go 源碼里還有沒有其他地方有類似的描述呢?挺多的。如下幾個,請看注解中的 “Hyrum's Law” 部分。

1、crypto/rsa/rsa.go[1]:

func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error) {
 // Note that while we don't commit to deterministic execution with respect
 // to the random stream, we also don't apply MaybeReadByte, so per Hyrum's
 // Law it's probably relied upon by some. It's a tolerable promise because a
 // ...

2、crypto/rsa/pss.go[2]:

func SignPSS(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error) {
 // Note that while we don't commit to deterministic execution with respect
 // to the rand stream, we also don't apply MaybeReadByte, so per Hyrum's Law
 // it's probably relied upon by some. It's a tolerable promise because a
 // ...

3、internal/weak[3]:

Using go:linkname to access this package and the functions it references
is explicitly forbidden by the toolchain because the semantics of this
package have not gone through the proposal process. By exposing this
functionality, we risk locking in the existing semantics due to Hyrum's Law.

總結

“海勒姆定律” 和 Go 源碼中的 “被動實踐” 都很好的印證了。只要你開放出去的東西,無論是接口,又或是參數。都有可能神不知鬼不覺中被用戶依賴了。當你一旦作出變更時,就有可能產生不兼容。導致第三方系統出錯或者產生臟數據,要進行洗數據。

為什么我會知道?因為最近我有一個朋友他遇到了(doge。當然,最好在設計系統或接口時,就要盡可能的減少依賴非預期行為的可能性!

參考資料

[1]crypto/rsa/rsa.go: https://github.com/golang/go/blob/5123f38e050c5ee7130d459ea247d998a838b5a1/src/crypto/rsa/rsa.go#L517

[2]crypto/rsa/pss.go: https://github.com/golang/go/blob/5123f38e050c5ee7130d459ea247d998a838b5a1/src/crypto/rsa/pss.go#L294

[3]internal/weak: https://github.com/golang/go/blob/5123f38e050c5ee7130d459ea247d998a838b5a1/src/internal/weak/pointer.go#L24

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2021-05-07 06:38:34

Go海勒姆定律程序

2013-01-15 10:55:43

JavaUpdate

2021-08-27 14:36:03

JamfiOS應用權限

2021-02-21 09:09:24

GoGOPATH代碼

2024-01-05 07:41:08

Go語言語句

2021-11-10 15:37:49

Go源碼指令

2020-04-30 09:24:46

Go項目語言

2021-03-23 09:44:43

App信息應用

2015-01-05 09:44:33

Github

2021-10-28 19:35:48

Go 控制超時

2021-12-29 11:15:08

人工智能AI虹膜識別

2023-04-26 08:43:28

GoCGO語言

2023-11-07 08:45:25

Go透明文件夾語言

2022-09-07 09:33:41

系統東軟核酸檢測

2013-10-29 10:36:34

2009-11-11 14:19:55

PHP之父勒多夫Lerdorf

2013-11-12 10:09:03

編程文化

2022-01-17 16:18:14

Go枚舉源碼

2022-09-19 13:57:24

文件前端代碼

2021-01-26 20:58:40

支付寶返鄉政策移動應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久成人亚洲 | 国产一区二区三区四区五区3d | 日韩成人在线观看 | 日韩精品一区二区三区在线播放 | 亚洲精品中文字幕 | 日本精品久久 | 一区二区三区精品视频 | 国产精品成人一区二区 | 日韩国产中文字幕 | 波多野结衣在线观看一区二区三区 | 中文字幕久久精品 | 亚洲人成免费 | 国产精品一区二区久久久久 | 伊人伊人 | 亚洲成人在线视频播放 | 亚洲精品久久久久中文字幕欢迎你 | 粉嫩国产精品一区二区在线观看 | 亚洲精品片 | 精品亚洲91| 日韩视频一区二区在线 | 成人精品鲁一区一区二区 | 亚洲成人在线免费 | 成人动慢 | 日本高清在线一区 | 欧美性成人 | 久久亚洲精品国产精品紫薇 | 亚洲97 | 日韩精品一区二区不卡 | 欧美精品中文 | 人人看人人草 | 久久久久精 | 亚洲精品一区二区三区中文字幕 | h视频在线免费观看 | 久久久久久国产精品 | av黄色片在线观看 | 久久在线 | 国产一级淫片免费视频 | 一级毛片视频在线 | 久久久久久久久国产成人免费 | 免费黄色大片 | 91传媒在线观看 |