内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

go語言函數(shù)可選參數(shù) golang 函數(shù)作為參數(shù)

GO語言學(xué)習(xí)系列八——GO函數(shù)(func)的聲明與使用

GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫在最前面,其余函數(shù)按照功能需要進(jìn)行排列

目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、利通網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)

GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

GO的函數(shù)用 func 來聲明,且左大括號(hào) { 不能另起一行

一個(gè)簡單的示例:

輸出為:

參數(shù):可以傳0個(gè)或多個(gè)值來供自己用

返回:通過用 return 來進(jìn)行返回

輸出為:

上面就是一個(gè)典型的多參數(shù)傳遞與多返回值

對例子的說明:

按值傳遞:是對某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值

引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變原來的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗

在上例中,返回值 (d int, e int, f int) { 是進(jìn)行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:

當(dāng)返回了多個(gè)值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來補(bǔ)位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個(gè)可變長度的參數(shù)

輸出為:

在上例中, strs ...string 中, strs 的實(shí)際值是b,c,d,e,這就是一個(gè)最簡單的傳遞可變長度的參數(shù)的例子,更多一些演變的形式,都非常類似

在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對像中的析構(gòu)函數(shù),也就是在某個(gè)函數(shù)執(zhí)行完成后,GO會(huì)自動(dòng)這個(gè);

如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進(jìn)后出;

當(dāng)某個(gè)函數(shù)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), defer 也會(huì)被調(diào)用

輸出為

這是一個(gè)最簡單的測試了,當(dāng)然還有更復(fù)雜的調(diào)用,比如調(diào)試程序時(shí),判斷是哪個(gè)函數(shù)出了問題,完全可以根據(jù) defer 打印出來的內(nèi)容來進(jìn)行判斷,非??焖伲@種留給你們?nèi)?shí)現(xiàn)

一個(gè)函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱之為遞歸函數(shù),在做遞歸調(diào)用時(shí),經(jīng)常會(huì)將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用

本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct

go語言中實(shí)現(xiàn)切片(slice)的三種方式

定義一個(gè)切片,然后讓切片去引用一個(gè)已經(jīng)創(chuàng)建好的數(shù)組。基本語法如下:

索引1:切片引用的起始元素位

索引2:切片只引用該元素位之前的元素

例程如下:

在該方法中,我們未指定容量cap,這里的值為5是系統(tǒng)定義的。

在方法一中,可以用arr數(shù)組名來操控?cái)?shù)組中的元素,也可以通過slice切片來操控?cái)?shù)組中的元素。切片是直接引用數(shù)組,數(shù)組是事先存在的,程序員是可見的。

通過 make 來創(chuàng)建切片,基本語法如下:

make函數(shù)第三個(gè)參數(shù)cap即容量是可選的,如果一定要自己注明的話,要注意保證cap≥len。

用該方法可以 指定切片的大小(len)和容量(cap)

例程如下:

由于未賦值系統(tǒng)默認(rèn)將元素值置為0,即:

數(shù)值類型數(shù)組:????默認(rèn)值為 0

字符串?dāng)?shù)組:? ? ? ?默認(rèn)值為 ""

bool數(shù)組:? ? ? ? ? ?默認(rèn)值為 false

在方法二中,通過make方式創(chuàng)建的切片對應(yīng)的數(shù)組是由make底層維護(hù),對外不可見,即只能通過slice去訪問各個(gè)元素。

定義一個(gè)切片,直接就指定具體數(shù)組,使用原理類似于make的方式。

例程如下:

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

大家好,我是小白,有點(diǎn)黑的那個(gè)白。

最近遇到一個(gè)問題,因?yàn)闃I(yè)務(wù)需求,需要對接第三方平臺(tái).

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

為此我們封裝了一個(gè)獨(dú)立的包 xxx-go-sdk 以便維護(hù)和對接使用.

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

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

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

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

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

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

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

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

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

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

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

這樣后續(xù)不管新增多少參數(shù),只需要新增配置項(xiàng)并添加獨(dú)立的設(shè)置函數(shù)即可輕松擴(kuò)展,并且不會(huì)影響原有函數(shù)的參數(shù)順序和個(gè)數(shù)位置等。

至此,每個(gè)選項(xiàng)是區(qū)分開來了,那么怎么作用到我們的 Client 結(jié)構(gòu)體上呢?

首先,配置選項(xiàng)都被提取到了 Options 結(jié)構(gòu)體重,所以我們需要調(diào)整一下 Client 結(jié)構(gòu)體的參數(shù)

其次,每一個(gè)選項(xiàng)函數(shù)返回 Option,那么任意多個(gè)就是 ...Option,我們調(diào)整一下構(gòu)造函數(shù) NewClient 的參數(shù)形式,改為可變參數(shù),不再局限于固定順序的幾個(gè)參數(shù)。

然后循環(huán)遍歷每個(gè)選項(xiàng)函數(shù),來生成Client結(jié)構(gòu)體的完整配置選項(xiàng)。

那么怎么調(diào)用呢?對于調(diào)用方而已,直接在調(diào)用構(gòu)造函數(shù)NewClient()的參數(shù)內(nèi)添加自己需要的設(shè)置函數(shù)(WithXXX)即可

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

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

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

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

分享文章:go語言函數(shù)可選參數(shù) golang 函數(shù)作為參數(shù)
瀏覽地址:http://m.rwnh.cn/article30/doopdpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站策劃網(wǎng)站改版、建站公司、網(wǎng)站營銷網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
桃源县| 南郑县| 富川| 韶关市| 教育| 通州市| 霸州市| 黔江区| 临夏县| 浮梁县| 古田县| 陆良县| 阿鲁科尔沁旗| 甘孜县| 临西县| 措勤县| 额尔古纳市| 余干县| 孟津县| 全椒县| 含山县| 汝城县| 长乐市| 固始县| 万荣县| 奇台县| 达日县| 吴桥县| 那坡县| 青神县| 资讯| 双流县| 板桥市| 吴桥县| 郸城县| 新蔡县| 嘉祥县| 辉南县| 苗栗市| 梅州市| 黔江区|