欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言函數(shù)怎么寫 go語言 gin

Golang入門到項目實戰(zhàn) | golang 函數(shù)

函數(shù)的go語言中的一級公民,我們把所有的功能單元都定義在函數(shù)中,可以重復使用。函數(shù)包含函數(shù)的名稱、參數(shù)列表和返回值類型,這些構(gòu)塌衡成了函數(shù)的簽名(signature)。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供海口網(wǎng)站建設、海口做網(wǎng)站、海口網(wǎng)站設計、海口網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、海口企業(yè)網(wǎng)站模板建站服務,十載海口做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

函數(shù)在使用之前必須先定義,可以調(diào)用函如歷數(shù)來完成某個任務。函數(shù)可以重復調(diào)用,從而達到代碼重用。

go語言函數(shù)定義語法

語法解析:

go語言函數(shù)定義實例

定義一個求和函數(shù)

定義一個比較兩個數(shù)大小的函數(shù)

go語言函數(shù)調(diào)用

當我們要完成某個任務時,可以調(diào)用函數(shù)來完成。調(diào)用函數(shù)要傳遞參數(shù),如何有返回值可以渣衫搜獲得返回值。

運行結(jié)果

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

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

最近遇到一個問題,因為業(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ù)不一定是必須的,有些參數(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語言中函數(shù)的參數(shù)傳遞與調(diào)用

按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對參數(shù)不會有影響。

默認情況下,Go編程語言使用調(diào)用通過值的方法來傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來調(diào)用所述函數(shù)的參數(shù)。考慮函數(shù)swap()的定義如下。

代碼如下:

/* function definition to swap the values */

func swap(int x, int y) int {

var temp int

temp = x /* save the value of x */

x = y /* put y into x */

y = temp /* put temp into y */

return temp;

}

現(xiàn)在,讓我們通過使實際值作為在以下示例調(diào)用函數(shù)swap():

代碼如下:

package main

import "fmt"

func main() {

/* local variable definition */

var a int = 100

var b int = 200

fmt.Printf("Before swap, value of a : %d\n", a )

fmt.Printf("Before swap, value of b : %d\n", b )

/* calling a function to swap the values */

swap(a, b)

fmt.Printf("After swap, value of a : %d\n", a )

fmt.Printf("After swap, value of b : %d\n", b )

}

func swap(x, y int) int {

var temp int

temp = x /* save the value of x */

x = y /* put y into x */

y = temp /* put temp into y */

return temp;

}

讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生培茄以下結(jié)果:

Before swap, value of a :100

Before swap, value of b :200

After swap, value of a :100

After swap, value of b :200

這表明,參數(shù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。

通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實際參數(shù)。這意味著,對參數(shù)的更改會影響傳遞的參數(shù)。

要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應的,需困蠢要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個配尺察整型變量的值指向它的參數(shù)。

代碼如下:

/* function definition to swap the values */

func swap(x *int, y *int) {

var temp int

temp = *x /* save the value at address x */

*x = *y /* put y into x */

*y = temp /* put temp into y */

}

現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過引用作為在下面的示例中傳遞數(shù)值:

代碼如下:

package main

import "fmt"

func main() {

/* local variable definition */

var a int = 100

var b int= 200

fmt.Printf("Before swap, value of a : %d\n", a )

fmt.Printf("Before swap, value of b : %d\n", b )

/* calling a function to swap the values.

* a indicates pointer to a ie. address of variable a and

* b indicates pointer to b ie. address of variable b.

*/

swap(a, b)

fmt.Printf("After swap, value of a : %d\n", a )

fmt.Printf("After swap, value of b : %d\n", b )

}

func swap(x *int, y *int) {

var temp int

temp = *x /* save the value at address x */

*x = *y /* put y into x */

*y = temp /* put temp into y */

}

讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:

Before swap, value of a :100

Before swap, value of b :200

After swap, value of a :200

After swap, value of b :100

這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。

go語言從入門到精通第四天函數(shù)

當我們將一種功能用于多個地方的時候,就需要封裝這些功能,以便于多次使用,然而封裝就需要使用函數(shù)來進行封裝,因此本章我們就來說說函數(shù)的使用方法。我們畝弊先來看看涉及到函數(shù)的一些用法目錄。如下:

無參搭耐梁函數(shù)

有參函數(shù)

帶返回值的函數(shù)

帶多個返回值的函數(shù)

匿名函數(shù)

閉包

自調(diào)用

遞歸

本章內(nèi)容還是比較豐富知運的,請耐心往下看。

分享題目:go語言函數(shù)怎么寫 go語言 gin
分享路徑:http://www.chinadenli.net/article46/ddpiihg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站域名注冊品牌網(wǎng)站制作網(wǎng)站維護外貿(mào)建站網(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)

網(wǎng)站建設網(wǎng)站維護公司