最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解

 更新時(shí)間:2023年10月19日 10:40:20   作者:帽兒山的槍手  
這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

函數(shù)介紹

為了完成某一功能的程序指令(語(yǔ)句)的集合,稱為函數(shù)。

Go 語(yǔ)言的函數(shù)可以分為:自定義函數(shù)和系統(tǒng)函數(shù)。Go 語(yǔ)言函數(shù)與其他語(yǔ)言函數(shù)最大的不同是,Go 語(yǔ)言的函數(shù)可以支持返回任意多個(gè)值,而其他語(yǔ)言的函數(shù)一般只支持返回一個(gè)值。

比如C語(yǔ)言函數(shù)返回值只能是一種類(lèi)型。

Go 語(yǔ)言的函數(shù)也支持普通函數(shù)、匿名函數(shù)和閉包三種形式。

函數(shù)特點(diǎn)

  • 無(wú)需聲明原型
  • 支持不定變參
  • 支持多返回值
  • 支持命名返回參數(shù)
  • 支持匿名函數(shù)和閉包 (變向的高階函數(shù))
  • 函數(shù)也是一種類(lèi)型,一個(gè)函數(shù)可以賦值給變量
  • 不支持嵌套 (nested) 一個(gè)包不能有兩個(gè)名字一樣的函數(shù)
  • 不支持重載 (overload)
  • 不支持默認(rèn)參數(shù) (default parameter)

函數(shù)聲明

函數(shù)聲明包括函數(shù)名、形式參數(shù)列表、返回值列表(可省略)以及函數(shù)體。

func name(parameter-list) (result-list) {   // 聲明函數(shù)名
  // 函數(shù)體
}

如果函數(shù)返回一個(gè)無(wú)名變量或者沒(méi)有返回值,返回值列表的括號(hào)是可以省略的。如果一個(gè)函數(shù)聲明不包括返回值列表,那么函數(shù)體執(zhí)行完畢后,不會(huì)返回任何值。

傳參方式

值傳遞

指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對(duì)參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。

func num(x, y int) int {
       // 處理邏輯
}

引用傳遞

是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對(duì)參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。

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

    temp = *x /* 保存 x 的值 */
    *x = *y   /* 將 y 值賦給 x */
    *y = temp /* 將 temp 值賦給 y*/
}

無(wú)論是值傳遞,還是引用傳遞,傳遞給函數(shù)的都是變量的副本,不過(guò),值傳遞是值的拷貝。

引用傳遞是地址的拷貝,一般來(lái)說(shuō),地址拷貝更為高效。而值拷貝取決于拷貝的對(duì)象大小,對(duì)象越大,則性能越低。

map、slice、chan、指針、interface默認(rèn)以引用的方式傳遞。

不定參數(shù)傳值

函數(shù)的參數(shù)不是固定,后面的類(lèi)型是固定的。 (可變參數(shù))

golang可變參數(shù)本質(zhì)上就是slice。

在參數(shù)賦值時(shí)可以不用一一的賦值,可以直接傳遞一個(gè)數(shù)組或者切片,注意在參數(shù)后加上  即可。

func myfunc(args ...int) {    //0個(gè)或多個(gè)參數(shù)
}
func add(a int, args ...int) int {    //1個(gè)或多個(gè)參數(shù)
}
func add(a int, b int, args ...int) int {    //2個(gè)或多個(gè)參數(shù)
}

其中args是一個(gè)slice類(lèi)型,我們可以通過(guò) arg[index] 依次訪問(wèn)所有參數(shù),通過(guò) len(arg) 來(lái)判斷傳遞參數(shù)的個(gè)數(shù)。

使用slice對(duì)象做變參時(shí),必須展開(kāi)。

package main
import (
    "fmt"
)
func sum(s string, n ...int) string {
    var x int
    for _, i := range n {
        x += i
    }
    return fmt.Sprintf(s, x) // 字符串拼接
}
func main() {
    s := []int{1, 2, 3}
    res := sum("sum: %d", s...)    // slice... 展開(kāi)slice
    println(res)
}

輸出結(jié)果

sum: 6

任意類(lèi)型的不定參數(shù)

函數(shù)的參數(shù)和每個(gè)參數(shù)的類(lèi)型都不是固定的。

用 interface{} 傳遞任意類(lèi)型數(shù)據(jù)是Go語(yǔ)言的慣例用法,而且 interface{} 的類(lèi)型是安全的。

func myfunc(args ...interface{}){ // 示例用法
  ...
}

返回值

_ 標(biāo)識(shí)符,用來(lái)忽略函數(shù)的某個(gè)返回值。

Go 的返回值可以被命名, 返回值的名稱應(yīng)當(dāng)具有一定意義。

沒(méi)有參數(shù)的 return 語(yǔ)句返回各個(gè)返回變量的當(dāng)前值,這種用法被稱作“裸”返回。

func myfunc(arg int) (arg int) { // 示例用法
   return arg
}

以上就是Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Golang函數(shù)參數(shù)傳值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解golang開(kāi)發(fā)中select多路選擇

    詳解golang開(kāi)發(fā)中select多路選擇

    這篇文章主要介紹了golang開(kāi)發(fā)中select多路選擇,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • go語(yǔ)言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)

    go語(yǔ)言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了go語(yǔ)言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Golang?中的json.Marshal問(wèn)題總結(jié)(推薦)

    Golang?中的json.Marshal問(wèn)題總結(jié)(推薦)

    這篇文章主要介紹了Golang中的json.Marshal問(wèn)題總結(jié),本文通過(guò)一個(gè)例子給大家詳細(xì)講解,本次提出的問(wèn)題中,我們不難注意到其中的time.Time是一個(gè)匿名(Anonymous)字段,而這個(gè)就是答案的由來(lái),需要的朋友可以參考下
    2022-06-06
  • Go中數(shù)組傳參的幾種方式小結(jié)

    Go中數(shù)組傳參的幾種方式小結(jié)

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 揭秘Go語(yǔ)言中的反射機(jī)制

    揭秘Go語(yǔ)言中的反射機(jī)制

    在Go語(yǔ)言中,反射是通過(guò)reflect包來(lái)實(shí)現(xiàn)的,通過(guò)使用反射,我們可以在運(yùn)行時(shí)獲取對(duì)象的類(lèi)型信息、訪問(wèn)對(duì)象的字段和方法、動(dòng)態(tài)調(diào)用方法等,反射在很多場(chǎng)景下都非常有用,比如編寫(xiě)通用的代碼、實(shí)現(xiàn)對(duì)象的序列化和反序列化、實(shí)現(xiàn)依賴注入等,需要的朋友可以參考下
    2023-10-10
  • Go語(yǔ)言bufio庫(kù)的全面指南與實(shí)戰(zhàn)技巧詳解

    Go語(yǔ)言bufio庫(kù)的全面指南與實(shí)戰(zhàn)技巧詳解

    這篇文章主要為大家全面介紹一下?bufio?庫(kù)的核心組件與功能,包括?Reader、Writer?和?Scanner?等并深入探討它們?cè)趯?shí)際編程中的運(yùn)用場(chǎng)景和技巧,感興趣的可以了解下
    2024-01-01
  • Golang中的結(jié)構(gòu)體和反射示例詳解

    Golang中的結(jié)構(gòu)體和反射示例詳解

    文章介紹了Go語(yǔ)言中結(jié)構(gòu)體的使用、結(jié)構(gòu)體與JSON數(shù)據(jù)的轉(zhuǎn)換以及反射機(jī)制,反射允許在運(yùn)行時(shí)獲取類(lèi)型信息、動(dòng)態(tài)調(diào)用方法、訪問(wèn)屬性和構(gòu)造對(duì)象,文章還提到了使用reflect包來(lái)獲取和操作結(jié)構(gòu)體的字段、方法、類(lèi)型和值,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-10-10
  • Golang 使用事務(wù)的簡(jiǎn)單實(shí)踐

    Golang 使用事務(wù)的簡(jiǎn)單實(shí)踐

    事務(wù)是保證數(shù)據(jù)一致性的重要手段,在Golang項(xiàng)目中,我們可以通過(guò)事務(wù)管理器或GORM的來(lái)簡(jiǎn)化事務(wù)的使用,本文就來(lái)詳細(xì)的介紹一下Golang 使用事務(wù)的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2025-11-11
  • golang中g(shù)ob的實(shí)現(xiàn)示例

    golang中g(shù)ob的實(shí)現(xiàn)示例

    本文介紹了Go語(yǔ)言的Gob格式,它是Go以二進(jìn)制形式序列化和反序列化程序數(shù)據(jù)的格式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool

    Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool的相關(guān)資料,Pool用于存儲(chǔ)那些被分配了但是沒(méi)有被使用,而未來(lái)可能會(huì)使用的值,以減小垃圾回收的壓力。文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12

最新評(píng)論

三门县| 长垣县| 当涂县| 兰考县| 延长县| 醴陵市| 湘西| 凤山市| 盘锦市| 辽阳市| 侯马市| 易门县| 蚌埠市| 儋州市| 濮阳市| 福清市| 海伦市| 北宁市| 定日县| 永平县| 广灵县| 福清市| 湟源县| 临桂县| 句容市| 宣武区| 沈丘县| 镇雄县| 临湘市| 叶城县| 南丰县| 曲周县| 沧州市| 黄骅市| 兴化市| 敦化市| 鲁甸县| 曲水县| 靖远县| 枣强县| 仙居县|