go語言values go語言和python哪個(gè)好

Golang url.Values轉(zhuǎn)換struct

大家在寫golang http服務(wù)的時(shí)候或許會(huì)碰到 Request 中 url.Values 轉(zhuǎn)換成 struct 的需要。

為彝良等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及彝良網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、彝良網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

翻開 net.url 查看 url.Values 的定義

那么我是不是可以通過遍歷 struct 的 Field 獲取對(duì)應(yīng)的數(shù)據(jù)類型,以及通過tag來從 url.Values 中獲取對(duì)應(yīng)的參數(shù)?

答案是可以的,那么我們就開動(dòng)吧。

先來定義一個(gè) struct ,還有一個(gè)叫 param 的tag。

好了,思路基本上是這樣的,具體實(shí)現(xiàn)細(xì)節(jié)請(qǐng)參考

GitHub源碼地址

怎么樣使用Go語言中函數(shù)的參數(shù)傳遞與調(diào)用

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

默認(rèn)情況下,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)在,讓我們通過使實(shí)際值作為在以下示例調(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;

}

讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(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ù)。這意味著,對(duì)參數(shù)的更改會(huì)影響傳遞的參數(shù)。

要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應(yīng)的,需要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個(gè)整型變量的值指向它的參數(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 */

}

讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(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ù)之外。

3.5 Go語言中將函數(shù)作為值使用

在匿名函數(shù)中,我們已經(jīng)見過這種形式,即將匿名函數(shù)體整體賦值給某個(gè)變量,此時(shí)該變量就相當(dāng)于這個(gè)函數(shù),Python中也有類似的表達(dá)方式。

通過程序的輸出,我們能夠觀察到:

最后請(qǐng)大家思考,如果匿名函數(shù)執(zhí)行了,程序還能正常運(yùn)行嗎?

答案很顯然是不行的,你看看到這樣的錯(cuò)誤./test_function_values.go:8:3: (func literal)() used as value,這里面有兩個(gè)問題:

我們嘗試修復(fù)一下這個(gè)問題,我們做了以下修改:

再次運(yùn)行,有以下顯著變化:

既然能賦值給變量,也能在map中使用,在下面的例子中,我們就將函數(shù)體賦值給map中的值,我們來分析下面的例子:

對(duì)于輸出結(jié)果,我們有以下結(jié)論:

由于函數(shù)可以作為值,所以很容易作為參數(shù)傳給函數(shù)。這里來看一個(gè)簡(jiǎn)單的示例:

我們來分析一下上面的代碼

本文題目:go語言values go語言和python哪個(gè)好
標(biāo)題URL:http://muchs.cn/article42/dosppec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)、網(wǎng)站策劃、網(wǎng)站改版

廣告

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

營(yíng)銷型網(wǎng)站建設(shè)