1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Go 經(jīng)典入門(mén)系列 6:函數(shù)

        共 3791字,需瀏覽 8分鐘

         ·

        2020-12-07 01:57

        點(diǎn)擊上方藍(lán)色“Go語(yǔ)言中文網(wǎng)”關(guān)注,每天一起學(xué) Go

        這是我們 Golang 系列教程第 6 章,學(xué)習(xí) Golang 函數(shù)的相關(guān)知識(shí)。

        函數(shù)是什么?

        函數(shù)是一塊執(zhí)行特定任務(wù)的代碼。一個(gè)函數(shù)是在輸入源基礎(chǔ)上,通過(guò)執(zhí)行一系列的算法,生成預(yù)期的輸出。

        函數(shù)的聲明

        在 Go 語(yǔ)言中,函數(shù)聲明通用語(yǔ)法如下:

        func?functionname(parametername?type)?returntype?{
        ????//?函數(shù)體(具體實(shí)現(xiàn)的功能)
        }

        函數(shù)的聲明以關(guān)鍵詞 func 開(kāi)始,后面緊跟自定義的函數(shù)名 functionname (函數(shù)名)。函數(shù)的參數(shù)列表定義在 () 之間,返回值的類(lèi)型則定義在之后的 returntype (返回值類(lèi)型)處。聲明一個(gè)參數(shù)的語(yǔ)法采用 參數(shù)名 參數(shù)類(lèi)型 的方式,任意多個(gè)參數(shù)采用類(lèi)似 (parameter1 type, parameter2 type) 即(參數(shù)1 參數(shù)1的類(lèi)型,參數(shù)2 參數(shù)2的類(lèi)型)的形式指定。之后包含在 {} 之間的代碼,就是函數(shù)體。

        函數(shù)中的參數(shù)列表和返回值并非是必須的,所以下面這個(gè)函數(shù)的聲明也是有效的

        func?functionname()?{
        ?//?譯注:?表示這個(gè)函數(shù)不需要輸入?yún)?shù),且沒(méi)有返回值
        }

        示例函數(shù)

        我們以寫(xiě)一個(gè)計(jì)算商品價(jià)格的函數(shù)為例,輸入?yún)?shù)是單件商品的價(jià)格和商品的個(gè)數(shù),兩者的乘積為商品總價(jià),作為函數(shù)的輸出值。

        func?calculateBill(price?int,?no?int)?int?{
        ????var?totalPrice?=?price?*?no?//?商品總價(jià)?=?商品單價(jià)?*?數(shù)量
        ????return?totalPrice?//?返回總價(jià)
        }

        上述函數(shù)有兩個(gè)整型的輸入 priceno,返回值 totalPricepriceno 的乘積,也是整數(shù)類(lèi)型。

        如果有連續(xù)若干個(gè)參數(shù),它們的類(lèi)型一致,那么我們無(wú)須一一羅列,只需在最后一個(gè)參數(shù)后添加該類(lèi)型。 例如,price int, no int 可以簡(jiǎn)寫(xiě)為 price, no int,所以示例函數(shù)也可寫(xiě)成

        func?calculateBill(price,?no?int)?int?{
        ????var?totalPrice?=?price?*?no
        ????return?totalPrice
        }

        現(xiàn)在我們已經(jīng)定義了一個(gè)函數(shù),我們要在代碼中嘗試著調(diào)用它。調(diào)用函數(shù)的語(yǔ)法為 functionname(parameters)。調(diào)用示例函數(shù)的方法如下:

        calculateBill(10,?5)

        完成了示例函數(shù)聲明和調(diào)用后,我們就能寫(xiě)出一個(gè)完整的程序,并把商品總價(jià)打印在控制臺(tái)上:

        package?main

        import?(
        ????"fmt"
        )

        func?calculateBill(price,?no?int)?int?{
        ????var?totalPrice?=?price?*?no
        ????return?totalPrice
        }
        func?main()?{
        ????price,?no?:=?90,?6?//?定義?price?和?no,默認(rèn)類(lèi)型為?int
        ????totalPrice?:=?calculateBill(price,?no)
        ????fmt.Println("Total?price?is",?totalPrice)?//?打印到控制臺(tái)上
        }

        運(yùn)行這個(gè)程序[1]

        該程序在控制臺(tái)上打印的結(jié)果為

        Total?price?is?540

        多返回值

        Go 語(yǔ)言支持一個(gè)函數(shù)可以有多個(gè)返回值。我們來(lái)寫(xiě)個(gè)以矩形的長(zhǎng)和寬為輸入?yún)?shù),計(jì)算并返回矩形面積和周長(zhǎng)的函數(shù) rectProps。矩形的面積是長(zhǎng)度和寬度的乘積, 周長(zhǎng)是長(zhǎng)度和寬度之和的兩倍。即:

        • 面積 = 長(zhǎng) * 寬
        • 周長(zhǎng) = 2 * ( 長(zhǎng) + 寬 )
        package?main

        import?(
        ????"fmt"
        )

        func?rectProps(length,?width?float64)(float64,?float64)?{
        ????var?area?=?length?*?width
        ????var?perimeter?=?(length?+?width)?*?2
        ????return?area,?perimeter
        }

        func?main()?{
        ????area,?perimeter?:=?rectProps(10.8,?5.6)
        ????fmt.Printf("Area?%f?Perimeter?%f",?area,?perimeter)
        }

        運(yùn)行這個(gè)程序[2]

        如果一個(gè)函數(shù)有多個(gè)返回值,那么這些返回值必須用 () 括起來(lái)。func rectProps(length, width float64)(float64, float64) 示例函數(shù)有兩個(gè) float64 類(lèi)型的輸入?yún)?shù) lengthwidth,并返回兩個(gè) float64 類(lèi)型的值。該程序在控制臺(tái)上打印結(jié)果為

        Area?60.480000?Perimeter?32.800000

        命名返回值

        從函數(shù)中可以返回一個(gè)命名值。一旦命名了返回值,可以認(rèn)為這些值在函數(shù)第一行就被聲明為變量了。

        上面的 rectProps 函數(shù)也可用這個(gè)方式寫(xiě)成:

        func?rectProps(length,?width?float64)(area,?perimeter?float64)?{
        ????area?=?length?*?width
        ????perimeter?=?(length?+?width)?*?2
        ????return?//?不需要明確指定返回值,默認(rèn)返回?area,?perimeter?的值
        }

        請(qǐng)注意, 函數(shù)中的 return 語(yǔ)句沒(méi)有顯式返回任何值。由于 areaperimeter 在函數(shù)聲明中指定為返回值, 因此當(dāng)遇到 return 語(yǔ)句時(shí), 它們將自動(dòng)從函數(shù)返回。

        空白符

        _ 在 Go 中被用作空白符,可以用作表示任何類(lèi)型的任何值。

        我們繼續(xù)以 rectProps 函數(shù)為例,該函數(shù)計(jì)算的是面積和周長(zhǎng)。假使我們只需要計(jì)算面積,而并不關(guān)心周長(zhǎng)的計(jì)算結(jié)果,該怎么調(diào)用這個(gè)函數(shù)呢?這時(shí),空白符 _ 就上場(chǎng)了。

        下面的程序我們只用到了函數(shù) rectProps 的一個(gè)返回值 area

        package?main

        import?(
        ????"fmt"
        )

        func?rectProps(length,?width?float64)?(float64,?float64)?{
        ????var?area?=?length?*?width
        ????var?perimeter?=?(length?+?width)?*?2
        ????return?area,?perimeter
        }
        func?main()?{
        ????area,?_?:=?rectProps(10.8,?5.6)?//?返回值周長(zhǎng)被丟棄
        ????fmt.Printf("Area?%f?",?area)
        }

        運(yùn)行這個(gè)程序[3]

        在程序的 area, _ := rectProps(10.8, 5.6) 這一行,我們看到空白符 _ 用來(lái)跳過(guò)不要的計(jì)算結(jié)果。

        本章教程到此告一段落了,感謝您的閱讀,歡迎您的任何評(píng)論和反饋。

        上一教程 - 常量

        下一教程 - 包 (Packages)[4]


        via: https://golangbot.com/functions/

        作者:Nick Coghlan[5]譯者:Junedayday[6]校對(duì):Unknwon[7]polaris1119[8]

        本文由 GCTT[9] 原創(chuàng)編譯,Go 中文網(wǎng)[10] 榮譽(yù)推出

        參考資料

        [1]

        運(yùn)行這個(gè)程序: https://play.golang.org/p/YJlW3g-VZH

        [2]

        運(yùn)行這個(gè)程序: https://play.golang.org/p/qAftE_yke_

        [3]

        運(yùn)行這個(gè)程序: https://play.golang.org/p/IkugSH1jIt

        [4]

        包 (Packages): https://studygolang.com/articles/11893

        [5]

        Nick Coghlan: https://golangbot.com/about/

        [6]

        Junedayday: https://github.com/Junedayday

        [7]

        Unknwon: https://github.com/Unknwon

        [8]

        polaris1119: https://github.com/polaris1119

        [9]

        GCTT: https://github.com/studygolang/GCTT

        [10]

        Go 中文網(wǎng): https://studygolang.com/



        推薦閱讀


        福利

        我為大家整理了一份從入門(mén)到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門(mén)看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù) ebook 獲?。贿€可以回復(fù)「進(jìn)群」,和數(shù)萬(wàn) Gopher 交流學(xué)習(xí)。

        瀏覽 30
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            思思热精品| 国产视频黄片 | 国产一级美女视频 | 黑丝骚逼| 婷婷国产天堂久久综合 | 国产精品女生 | 国产精品久久久久久久影歌 | 嗯~用力啊~嗯~c | 国产成人片无码免费视频导航 | 小受被打开双腿狠狠灌满 |