欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

函數(shù)介紹

為了完成某一功能的程序指令(語(yǔ)句)的集合,稱(chēng)為函數(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 的返回值可以被命名, 返回值的名稱(chēng)應(yīng)當(dāng)具有一定意義。

沒(méi)有參數(shù)的 return 語(yǔ)句返回各個(gè)返回變量的當(dāng)前值,這種用法被稱(chē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)文章

  • go語(yǔ)言題解LeetCode228匯總區(qū)間示例詳解

    go語(yǔ)言題解LeetCode228匯總區(qū)間示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode228匯總區(qū)間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • goland服務(wù)熱重啟的配置文件

    goland服務(wù)熱重啟的配置文件

    這篇文章主要介紹了goland服務(wù)熱重啟的配置文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Golang解析yaml文件操作指南

    Golang解析yaml文件操作指南

    之前一直從事java開(kāi)發(fā),習(xí)慣了使用yaml文件的格式,尤其是清晰的層次結(jié)構(gòu)、注釋,下面這篇文章主要給大家介紹了關(guān)于Golang解析yaml文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 如何在Go中使用切片容量和長(zhǎng)度

    如何在Go中使用切片容量和長(zhǎng)度

    這篇文章主要介紹了如何在Go中使用切片容量和長(zhǎng)度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • go?REST?API設(shè)計(jì)模式和反模式示例解析

    go?REST?API設(shè)計(jì)模式和反模式示例解析

    在這篇文章中,我們將探討一些常見(jiàn)的REST?API設(shè)計(jì)模式和開(kāi)發(fā)者應(yīng)該注意的反模式,我們還將提供Golang和Open?API?Schema的代碼片段來(lái)幫助說(shuō)明這些概念,有需要的朋友可以借鑒參考下
    2023-09-09
  • Go語(yǔ)言中g(shù)oroutine的使用

    Go語(yǔ)言中g(shù)oroutine的使用

    本文主要介紹了Go語(yǔ)言中g(shù)oroutine的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 一文初探?Goroutine?與?channel基本用法

    一文初探?Goroutine?與?channel基本用法

    這篇文章主要為大家介紹了一文初探?Goroutine?與?channel基本用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • golang小游戲開(kāi)發(fā)實(shí)戰(zhàn)之飛翔的小鳥(niǎo)

    golang小游戲開(kāi)發(fā)實(shí)戰(zhàn)之飛翔的小鳥(niǎo)

    這篇文章主要給大家介紹了關(guān)于golang小游戲開(kāi)發(fā)實(shí)戰(zhàn)之飛翔的小鳥(niǎo)的相關(guān)資料,,本文可以帶你你從零開(kāi)始,一步一步的開(kāi)發(fā)出這款小游戲,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Go語(yǔ)言常見(jiàn)哈希函數(shù)的使用

    Go語(yǔ)言常見(jiàn)哈希函數(shù)的使用

    哈希表(Hash table,也叫散列表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問(wèn)記錄,以加快查找的速度。具體的介紹網(wǎng)上有很詳細(xì)的描述,如閑聊哈希表 ,這里就不再累述了;
    2015-03-03
  • golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解

    golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解

    這篇文章主要介紹了golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05

最新評(píng)論