大家好,我是小白,有點黑的那個白。

羅平網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,羅平網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為羅平上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的羅平做網(wǎng)站的公司定做!
最近遇到一個問題,因為業(yè)務(wù)需求,需要對接第三方平臺.
而三方平臺提供的一些HTTP(S)接口都有統(tǒng)一的密鑰生成規(guī)則要求.
為此我們封裝了一個獨立的包 xxx-go-sdk 以便維護(hù)和對接使用.
其中核心的部分是自定義HTTP Client,如下:
一些平臺會要求appKey/appSecret等信息,所以Client結(jié)構(gòu)體就變成了這樣,這時參數(shù)還比較少, 而且是必填的參數(shù),我們可以提供構(gòu)造函數(shù)來明確指定。
看起來很滿足,但是當(dāng)我們需要增加一個 Timeout 參數(shù)來控制超時呢?
或許你會說這還不簡單,像下面一樣再加一個參數(shù)唄
那再加些其他的參數(shù)呢?那構(gòu)造函數(shù)的參數(shù)是不是又長又串,而且每個參數(shù)不一定是必須的,有些參數(shù)我們又會考慮默認(rèn)值的問題。
為此,勤勞但尚未致富的 gophers 們使用了總結(jié)一種實踐模式
首先提取所有需要的參數(shù)到一個獨立的結(jié)構(gòu)體 Options,當(dāng)然你也可以用 Configs 啥的.
然后為每個參數(shù)提供設(shè)置函數(shù)
這樣我們就為每個參數(shù)設(shè)置了獨立的設(shè)置函數(shù)。返回值 func(*Options) 看著有點不友好,我們提取下定義為單個 Option 調(diào)整一下代碼
當(dāng)我們需要添加更多的參數(shù)時,只需要在 Options 添加新的參數(shù)并添加新參數(shù)的設(shè)置函數(shù)即可。
比如現(xiàn)在要添加新的參數(shù) Timeout
這樣后續(xù)不管新增多少參數(shù),只需要新增配置項并添加獨立的設(shè)置函數(shù)即可輕松擴(kuò)展,并且不會影響原有函數(shù)的參數(shù)順序和個數(shù)位置等。
至此,每個選項是區(qū)分開來了,那么怎么作用到我們的 Client 結(jié)構(gòu)體上呢?
首先,配置選項都被提取到了 Options 結(jié)構(gòu)體重,所以我們需要調(diào)整一下 Client 結(jié)構(gòu)體的參數(shù)
其次,每一個選項函數(shù)返回 Option,那么任意多個就是 ...Option,我們調(diào)整一下構(gòu)造函數(shù) NewClient 的參數(shù)形式,改為可變參數(shù),不再局限于固定順序的幾個參數(shù)。
然后循環(huán)遍歷每個選項函數(shù),來生成Client結(jié)構(gòu)體的完整配置選項。
那么怎么調(diào)用呢?對于調(diào)用方而已,直接在調(diào)用構(gòu)造函數(shù)NewClient()的參數(shù)內(nèi)添加自己需要的設(shè)置函數(shù)(WithXXX)即可
當(dāng)需要設(shè)置超時參數(shù),直接添加 WithTimeout即可,比如設(shè)置3秒的超時
配置選項的位置可以任意設(shè)置,不需要受常規(guī)的固定參數(shù)順序約束。
可以看到,這種實踐模式主要作用于配置選項,利用函數(shù)支持的特性來實現(xiàn)的,為此得名 Functional Options Pattern,優(yōu)美的中國話叫做「函數(shù)選項模式」。
最后, 我們總結(jié)回顧一下在Go語言中函數(shù)選項模式的優(yōu)缺點
橢圓曲線密碼學(xué)(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的算法,基于橢圓曲線數(shù)學(xué)。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。
ECC的主要優(yōu)勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密算法——提供相當(dāng)?shù)幕蚋叩燃壍陌踩?/p>
橢圓曲線密碼學(xué)的許多形式有稍微的不同,所有的都依賴于被廣泛承認(rèn)的解決橢圓曲線離散對數(shù)問題的 困難性上。與傳統(tǒng)的基于大質(zhì)數(shù)因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質(zhì)產(chǎn)生密鑰。
ECC 164位的密鑰產(chǎn)生的一個安全級相當(dāng)于RSA 1024位密鑰提供的保密強(qiáng)度,而且計算量較小,處理速度 更快,存儲空間和傳輸帶寬占用較少。目前我國 居民二代身份證 正在使用 256 位的橢圓曲線密碼,虛擬 貨幣 比特幣 也選擇ECC作為加密算法。
具體算法詳解參考:
單向散列函數(shù)(one-wayfunction)有一個輸入和一個輸出,其中輸入稱為消息(message),輸出稱為散列值 (hashvalue)。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計算出散列值,而散列值就可以被用來檢查消息的完整性。
這里的消息不一定是人類能夠讀懂的文字,也可以是圖像文件或者聲音文件。單向散列函數(shù)不需要知道消息實
際代表的含義。無論任何消息,單向散列函數(shù)都會將它作為單純的比特序列來處理,即根據(jù)比特序列計算出散
列值。
散列值的長度和消息的長度無關(guān)。無論消息是1比特,還是100MB,甚至是IOOGB,單向散列函數(shù)都會計算出固 定長度的散列值。以SHA-I單向散列函數(shù)為例,它所計算出的散列值的長度永遠(yuǎn)是160比特(20字節(jié))。
單向散列函數(shù)的相關(guān)術(shù)語有很多變體,不同參考資料中所使用的術(shù)語也不同,下面我們就介紹其中的兒個。 單向散列函數(shù)也稱為 消息摘要函數(shù)(message digest function) 、 哈希函數(shù) 或者 雜湊函數(shù) 。 輸入單向散列函數(shù)的消息也稱為 原像 (pre-image) 。
單向散列函數(shù)輸出的散列值也稱為 消息摘要 (message digest)或者 指紋 (fingerprint)。 完整性 也稱為一致性。
MD4是由Rivest于1990年設(shè)計的單向散列函數(shù),能夠產(chǎn)生128比特的散列值(RFC1186,修訂版RFC1320)。不 過,隨著Dobbertin提出尋找MD4散列碰撞的方法,因此現(xiàn)在它已經(jīng)不安全了。
MD5是由Rwest于1991年設(shè)計的單項散列函數(shù),能夠產(chǎn)生128比特的散列值(RFC1321)。
MD5的強(qiáng)抗碰撞性已經(jīng)被攻破,也就是說,現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同的消息,因此它也已
經(jīng)不安全了。
MD4和MD5中的MD是消息摘要(Message Digest)的縮寫。
SHA-1是由NIST(NationalInstituteOfStandardsandTechnology,美國國家標(biāo)準(zhǔn)技術(shù)研究所)設(shè)計的一種能夠產(chǎn)生 160比特的散列值的單向散列函數(shù)。1993年被作為美國聯(lián)邦信息處理標(biāo)準(zhǔn)規(guī)格(FIPS PUB 180)發(fā)布的是 SHA,1995年發(fā)布的修訂版FIPS PUB 180-1稱為SHA-1。
SHA-1的消息長度存在上限,但這個值接近于2^64比特,是個非常巨大的數(shù)值,因此在實際應(yīng)用中沒有問題。
SHA-256、SHA-384和SHA-512都是由NIST設(shè)計的單向散列函數(shù),它們的散列值長度分別為256比特、384比特和
512比特。這些單向散列函數(shù)合起來統(tǒng)稱SHA-2,它們的消息長度也存在上限(SHA-256的上限接近于 2^64 比特,
SHA-384 和 SHA-512的上限接近于 2^128 比特)。這些單向散列函數(shù)是于2002年和 SHA-1 一起作為 FIPS PUB 180-2 發(fā)布的 SHA-1 的強(qiáng)抗碰撞性已于2005年被攻破, 也就是說,現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同的消 息。不過,SHA-2還尚未被攻破。
當(dāng)前名稱:go語言實踐 go語言實踐 pdf
標(biāo)題URL:http://www.js-pz168.com/article0/higgio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、云服務(wù)器、面包屑導(dǎo)航、服務(wù)器托管、定制開發(fā)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)