go語言設置 go語言如何

Go語言實踐模式 - 函數(shù)選項模式(Functional Options Pattern)

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

成都創(chuàng)新互聯(lián)主營獲嘉網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都app開發(fā),獲嘉h5小程序開發(fā)搭建,獲嘉網(wǎng)站營銷推廣歡迎獲嘉等地區(qū)企業(yè)咨詢

最近遇到一個問題,因為業(yè)務需求,需要對接第三方平臺.

而三方平臺提供的一些HTTP(S)接口都有統(tǒng)一的密鑰生成規(guī)則要求.

為此我們封裝了一個獨立的包 xxx-go-sdk 以便維護和對接使用.

其中核心的部分是自定義HTTP Client,如下:

一些平臺會要求appKey/appSecret等信息,所以Client結(jié)構(gòu)體就變成了這樣,這時參數(shù)還比較少, 而且是必填的參數(shù),我們可以提供構(gòu)造函數(shù)來明確指定。

看起來很滿足,但是當我們需要增加一個 Timeout 參數(shù)來控制超時呢?

或許你會說這還不簡單,像下面一樣再加一個參數(shù)唄

那再加些其他的參數(shù)呢?那構(gòu)造函數(shù)的參數(shù)是不是又長又串,而且每個參數(shù)不一定是必須的,有些參數(shù)我們又會考慮默認值的問題。

為此,勤勞但尚未致富的 gophers 們使用了總結(jié)一種實踐模式

首先提取所有需要的參數(shù)到一個獨立的結(jié)構(gòu)體 Options,當然你也可以用 Configs 啥的.

然后為每個參數(shù)提供設置函數(shù)

這樣我們就為每個參數(shù)設置了獨立的設置函數(shù)。返回值 func(*Options) 看著有點不友好,我們提取下定義為單個 Option 調(diào)整一下代碼

當我們需要添加更多的參數(shù)時,只需要在 Options 添加新的參數(shù)并添加新參數(shù)的設置函數(shù)即可。

比如現(xiàn)在要添加新的參數(shù) Timeout

這樣后續(xù)不管新增多少參數(shù),只需要新增配置項并添加獨立的設置函數(shù)即可輕松擴展,并且不會影響原有函數(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ù)(WithXXX)即可

當需要設置超時參數(shù),直接添加 WithTimeout即可,比如設置3秒的超時

配置選項的位置可以任意設置,不需要受常規(guī)的固定參數(shù)順序約束。

可以看到,這種實踐模式主要作用于配置選項,利用函數(shù)支持的特性來實現(xiàn)的,為此得名 Functional Options Pattern,優(yōu)美的中國話叫做「函數(shù)選項模式」。

最后, 我們總結(jié)回顧一下在Go語言中函數(shù)選項模式的優(yōu)缺點

寶可夢go怎么調(diào)成中文

需要在自己手機里找到語言設置,改成繁體中文,再打開游戲就可以了。

首先我們進入游戲,打開語言設置界面,選擇中文,再次打開游戲就看到語言變成中文了。

等待加載完成后,打開設置界面,再次打開游戲后就可以看到語言變成中文了。

想要把寶可夢go設置成中文只需要在自己手機里找到語言設置,改成繁體中文,再打開游戲就可以了。

需要注意的是,寶可夢go只支持繁體中文,不支持簡體中文,所以玩家千萬不要設置錯了。

Go時區(qū)設置

全球以英國倫敦格林威治作為零度經(jīng)線的起點,每隔15經(jīng)度為一個時區(qū),15度經(jīng)線為該時區(qū)的中央經(jīng)線,共分為24個時區(qū)。由西向東每隔15經(jīng)度增加一個時區(qū),相反的,每向西15經(jīng)度減少一個時區(qū)。中國所在時區(qū)為東8區(qū)。

當前時間 time.Now() 返回的是當?shù)貢r區(qū)的時間:

CST可以代表如下四個不同的時區(qū):

time.Now() 返回的 +0800 CST 表示的就是中國標準時間,與UTC時間有如下的轉(zhuǎn)化:

Wall Clocks表示掛鐘時間,存儲的是自1970 年 1 月 1 日 0 時 0 分 0 秒以來的時間戳,當系統(tǒng)和授時服務器進行校準時間時間操作時,有可能造成這一秒是2018-1-1 00:00:00,而下一秒變成了2017-12-31 23:59:59的情況。

Monotonic Clocks,意思是單調(diào)時間的,所謂單調(diào),就是只會不停的往前增長,不受校時操作的影響,這個時間是自進程啟動以來的秒數(shù)。

time.Now() 返回的 m=+0.004002201 就是表示Monotonic Clocks

go語言中如果不設置指定的時區(qū),通過 time.Now() 獲取到的就是本地時區(qū)

設置時區(qū)有兩種方式:

固定時區(qū)到東八區(qū)。但這種不是對程序的全局設置,每次獲取時都需要固定時區(qū)

加載指定時區(qū)。但如果沒有g(shù)o環(huán)境使用這種方式就會加載失敗,因為時區(qū)信息是放在go的安裝包中的。

如果你用第二種方式加載時區(qū),在打docker鏡像時就需要進行時區(qū)相關的配置,配置文件如下:

參考文章:

go語言聊天室實現(xiàn)(七)websocket收消息設置

上一節(jié)中,我們?yōu)槊總€連接都創(chuàng)建了一個goroutine來讀取其中的消息,現(xiàn)在我們將這個讀取消息的方法實現(xiàn)一下。

我們在application目錄下新建controllers目錄,并在其中創(chuàng)建一個MessageController.go文件。

首先我們新建一個MessageController的結(jié)構(gòu)體,內(nèi)容如下

這個結(jié)構(gòu)體包括兩個內(nèi)容,一個是我們將連接放在數(shù)組之后,返回的索引,另一個是連接本身.

這個是具體的方法。

我們首先設置了一下讀消息的大小、超時時間以及超時后需要的操作。

超時時間如果設置為0,那么就是永不超時。之前在這里直接寫0,被告知需要傳一個time.Time類型的數(shù)據(jù)。最終谷歌后才得到了這個值time.Time{}為"0001-01-01 00:00:00 +0000 UTC"。

我們將用戶手法消息的內(nèi)容定義為一個結(jié)構(gòu)體,然后將用戶的訂閱信息的json通過json.unmarshal轉(zhuǎn)換成這個結(jié)構(gòu)體。

之后的switch操作與我們在Swoole中的操作基本雷同,在查詢到login之后,調(diào)用service中 的login方法來進行注冊。

下一節(jié)中我們再介紹具體的注冊邏輯。

網(wǎng)頁名稱:go語言設置 go語言如何
當前路徑:http://www.muchs.cn/article20/dopodjo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、靜態(tài)網(wǎng)站、網(wǎng)站排名、全網(wǎng)營銷推廣品牌網(wǎng)站制作、軟件開發(fā)

廣告

聲明:本網(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)

h5響應式網(wǎng)站建設