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

Go語(yǔ)言入門之函數(shù)的定義與使用

 更新時(shí)間:2022年11月01日 16:48:55   作者:宇宙之一粟  
函數(shù)是一段代碼的片段,包含連續(xù)的執(zhí)行語(yǔ)句,它可以將零個(gè)或多個(gè)輸入?yún)?shù)映射到零個(gè)或多個(gè)參數(shù)輸出。本文將通過(guò)示例和大家詳細(xì)聊聊Go語(yǔ)言中函數(shù)的定義與使用,感興趣的可以了解一下

1.前言

函數(shù)是一段代碼的片段,包含連續(xù)的執(zhí)行語(yǔ)句,它可以將零個(gè)或多個(gè)輸入?yún)?shù)映射到零個(gè)或多個(gè)參數(shù)輸出。函數(shù)像一個(gè)黑盒,對(duì)它的使用者隱藏實(shí)現(xiàn)細(xì)節(jié)。還可以在代碼中通過(guò)函數(shù)調(diào)用來(lái)執(zhí)行它們。

學(xué)到現(xiàn)在,我們使用的 Go 函數(shù)只有 main 函數(shù):

func main() {
}

2.函數(shù)聲明

每個(gè)函數(shù)都包含 func 關(guān)鍵字、函數(shù)名、輸入?yún)?shù)列表、一個(gè)可選的返回列表以及函數(shù)體

func name(parameter-list) (result-list) {
    function body
}
  • func 關(guān)鍵字:Go 語(yǔ)言使用 func 關(guān)鍵字來(lái)聲明一個(gè)函數(shù)。類似 Python 的 def 關(guān)鍵字。
  • 函數(shù)名:緊跟 func 關(guān)鍵字后的事函數(shù)名稱,函數(shù)名必須是一個(gè)標(biāo)識(shí)符,即不能跟 Go 語(yǔ)言關(guān)鍵字沖突
  • 輸入?yún)?shù)列表(形參列表):輸入?yún)?shù)聲明列表必須用一對(duì)小括號(hào)括起來(lái),指定一組變量的參數(shù)名參數(shù)類型,這些局部變量都由調(diào)用者提供的實(shí)參傳遞而來(lái)。
  • 輸出結(jié)果列表(返回列表):指定了函數(shù)返回值的類型。當(dāng)函數(shù)返回一個(gè)未命名的返回值或者沒(méi)有返回值的時(shí)候,返回列表的圓括號(hào)可以省略。在 Go 中,一個(gè)函數(shù)可以有多個(gè)返回值。
  • 函數(shù)體:函數(shù)體必須用一對(duì)大括號(hào)括起來(lái)。一對(duì)大括號(hào)和它其間的代碼形成了一個(gè)顯式代碼塊。在一個(gè)函數(shù)體內(nèi), return 關(guān)鍵字可以用來(lái)結(jié)束此函數(shù)的正常執(zhí)行流程并進(jìn)入此函數(shù)的退出階段。

2.1 函數(shù)例子

接下來(lái),看一個(gè)簡(jiǎn)單的 Go 整數(shù)計(jì)算器的 加、減、乘、除 函數(shù)的例子。

package main

import "fmt"

func add(num1 int, num2 int) (num3 int) {
    num3 = num1 + num2
    return
}

func subtract(num1 int, num2 int) int {

    num3 := num1 - num2
    return num3
}

func multiply(num1 int, num2 int) int {
    result := num1 * num2
    return result
}

func divide(num1 int, num2 int) (result int) {
    if num2 != 0 {
        result = num1 / num2
    } else {
        panic("division by zero")
    }
    return result
}

func main() {

    fmt.Printf("2021 + 19 = %d\n", add(2021, 19))
    fmt.Printf("2021 - 19 = %d\n", subtract(2021, 19))
    fmt.Printf("2021 * 19 = %d\n", multiply(2021, 19))
    fmt.Printf("2021 / 19 = %d\n", divide(2021, 19))
    // fmt.Printf("2021 / 0 = %d\n", divide(2021, 0))
}

結(jié)果為:

2021 + 19 = 2040
2021 - 19 = 2002
2021 * 19 = 38399
2021 / 19 = 106

如果我們除以 0 的話,調(diào)用了一個(gè)叫做 panic 的內(nèi)置函數(shù),該函數(shù)會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)的錯(cuò)誤。還會(huì)得到一個(gè)異常,異常也會(huì)在接下來(lái)的博客中學(xué)習(xí)到。

panic: division by zero

goroutine 1 [running]:
main.divide(...)
...

2.2 Go 函數(shù)支持多返回值

Go 支持一個(gè)函數(shù)返回多個(gè)值:

func f() (int, int){
    return 2014, 2021
}

func main() {
    x, y := f()
}

這里需要做三個(gè)改變:

  • 返回類型改變:多個(gè)返回類型用多個(gè)逗號(hào),分隔的類型,
  • 改變 return 后的表達(dá)式:使其包含多個(gè)逗號(hào), 的表達(dá)式,
  • 最后改變賦值語(yǔ)句,使多個(gè)值都在 :== 的左邊

多個(gè)返回值一般用于返回 error,例如 (x, err := f()) , 或者返回一個(gè)布爾值表示成功,如 (x, ok := f()) .

2.3 變量函數(shù)

對(duì)于 Go 函數(shù)中的最后一個(gè)參數(shù),有一種特殊的形式可以使用:

func add(args ...int) int {
    total := 0
    for _, v := range args {
        total += v
    }
    return total
}

func main() {
    fmt.Println(add(1,2,3))
}

通過(guò)在最后一個(gè)參數(shù)的類型名稱前使用 ... ,你可以表示它需要零個(gè)或多個(gè)這些 參數(shù)。在這種情況下,我們需要零個(gè)或多個(gè)整數(shù)。我們像其他函數(shù)一樣調(diào)用該函數(shù),而且可以傳遞我們想要的任何數(shù)量的變量。

這正是 fmt.Println 函數(shù)的實(shí)現(xiàn)方式:

func Println(a ...interface{}) (n int, err error)

Println() 函數(shù)可以接受任何數(shù)量的任何類型的值。我們也可以通過(guò)在 slice 后面加上 ... 來(lái)傳遞一個(gè) ints 的 slice 。

func main() {
    s1 := []int{1,2,3}
    fmt.Println(add(s1...))
}

2.4 閉包

可以在函數(shù)內(nèi)部創(chuàng)建函數(shù)。

func main() {
    add := func(x, y int) int {
        return x + y
    }
    fmt.Println(add(1,1))
}

add 是一個(gè)局部變量,其類型為 func(int, int) int(一個(gè)函數(shù)接收兩個(gè) int 參數(shù),并返回一個(gè) int 參數(shù))。當(dāng)你創(chuàng)建一個(gè)像這樣的局部函數(shù)時(shí),它還可以訪問(wèn)其他局部變量。

2.5 遞歸

最后,一個(gè)函數(shù)能夠調(diào)用自己。下面是一種方法來(lái)計(jì)算一個(gè)數(shù)字的階乘。

package main

import "fmt"

func factorial(x uint) uint {
    if x == 0 {
        return 1
    }

    return x * factorial(x-1)
}

func main() {
    fmt.Println(factorial(4))
}

閉包和遞歸是強(qiáng)大的編程技術(shù),它構(gòu)成了被稱為函數(shù)式編程的范式的基礎(chǔ)。大多數(shù)人都會(huì)發(fā)現(xiàn)函數(shù)式編程比以下方法更難理解:for 循環(huán)、if 語(yǔ)句、變量和簡(jiǎn)單函數(shù)的方法。

3.總結(jié)

  • 聲明函數(shù)需要提供函數(shù)名、形參列表和返回值列表
  • 名稱中首字母大寫的函數(shù)和類型將被導(dǎo)出并為其他包所用
  • 函數(shù)聲明中的每個(gè)形參和返回值都由名字后跟類型組成,如果多個(gè)形參或者返回值具有相同的類型,那么類型只需要給出一次即可。
  • 函數(shù)聲明中的返回值也可以省略名字,而只給出類型
  • 調(diào)用函數(shù)時(shí)需要根據(jù)其接受的形參給予相應(yīng)的實(shí)參,至于函數(shù)的執(zhí)行結(jié)果則會(huì)通過(guò)關(guān)鍵字 return 返回給調(diào)用者。

以上就是Go語(yǔ)言入門之函數(shù)的定義與使用的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言 函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang中函數(shù)(Function)和方法(Method)的區(qū)別詳解

    Golang中函數(shù)(Function)和方法(Method)的區(qū)別詳解

    在Golang中,大家必然會(huì)頻繁使用到函數(shù)(Function)和方法(Method),但是有的同學(xué)可能并沒(méi)有注意過(guò)函數(shù)和方法的異同點(diǎn),函數(shù)和方法都是用來(lái)執(zhí)行特定任務(wù)的代碼塊,雖然很相似,但也有很大的區(qū)別,所以本文將詳細(xì)講解函數(shù)和方法的定義以及它們的異同點(diǎn)
    2023-07-07
  • Go語(yǔ)言中利用http發(fā)起Get和Post請(qǐng)求的方法示例

    Go語(yǔ)言中利用http發(fā)起Get和Post請(qǐng)求的方法示例

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中利用http發(fā)起Get和Post請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Go工具鏈之go tool cover使用方法和示例詳解

    Go工具鏈之go tool cover使用方法和示例詳解

    go tool cover是Go工具鏈中的一個(gè)命令,作用是分析測(cè)試用例的代碼覆蓋率,本文將對(duì)go tool cover 作用,使用方法和使用場(chǎng)景作一個(gè)簡(jiǎn)單的介紹,感興趣的同學(xué)可以參考閱讀一下
    2023-07-07
  • 從零封裝Gin框架配置初始化全局變量

    從零封裝Gin框架配置初始化全局變量

    這篇文章主要為大家介紹了從零封裝Gin框架配置初始化全局變量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go的os/exec執(zhí)行超時(shí)導(dǎo)致程序死機(jī)的解決方案

    Go的os/exec執(zhí)行超時(shí)導(dǎo)致程序死機(jī)的解決方案

    這篇文章主要介紹了Go的os/exec執(zhí)行超時(shí)導(dǎo)致程序死機(jī)的幾種解決方案,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • go中new和make的區(qū)別小結(jié)

    go中new和make的區(qū)別小結(jié)

    new 只分配內(nèi)存,make 用于初始化 slice、map 和 channel,本文詳細(xì)的介紹了go中new和make的區(qū)別小結(jié),感興趣的可以了解一下
    2023-05-05
  • Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

    Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

    本文主要介紹了Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • go語(yǔ)言獲取系統(tǒng)盤符的方法

    go語(yǔ)言獲取系統(tǒng)盤符的方法

    這篇文章主要介紹了go語(yǔ)言獲取系統(tǒng)盤符的方法,涉及Go語(yǔ)言調(diào)用winapi獲取系統(tǒng)硬件信息的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Golang 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)裝飾器的一個(gè)實(shí)現(xiàn)詳解

    Golang 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)裝飾器的一個(gè)實(shí)現(xiàn)詳解

    這篇文章主要介紹了Golang 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)裝飾器的一個(gè)實(shí)現(xiàn)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的操作方法

    Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的操作方法

    這篇文章主要介紹了Golang 利用反射對(duì)結(jié)構(gòu)體優(yōu)雅排序的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

新竹市| 平泉县| 河东区| 鄯善县| 德州市| 吉隆县| 贡觉县| 临高县| 平江县| 任丘市| 禄劝| 莒南县| 三亚市| 洞口县| 永嘉县| 清新县| 呼和浩特市| 浦江县| 辽阳县| 甘德县| 壶关县| 义马市| 沁源县| 项城市| 郁南县| 比如县| 尼勒克县| 长垣县| 正定县| 绥化市| 盐边县| 宝鸡市| 图木舒克市| 施甸县| 景谷| 肃宁县| 汪清县| 固始县| 淮滨县| 南漳县| 邵阳县|