<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3791字,需瀏覽 8分鐘

           ·

          2020-12-07 01:57

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

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

          函數(shù)是什么?

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

          函數(shù)的聲明

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

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

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

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

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

          示例函數(shù)

          我們以寫一個(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ù)類型。

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

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

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

          calculateBill(10,?5)

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

          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)類型為?int
          ????totalPrice?:=?calculateBill(price,?no)
          ????fmt.Println("Total?price?is",?totalPrice)?//?打印到控制臺上
          }

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

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

          Total?price?is?540

          多返回值

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

          • 面積 = 長 * 寬
          • 周長 = 2 * ( 長 + 寬 )
          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è)返回值,那么這些返回值必須用 () 括起來。func rectProps(length, width float64)(float64, float64) 示例函數(shù)有兩個(gè) float64 類型的輸入?yún)?shù) lengthwidth,并返回兩個(gè) float64 類型的值。該程序在控制臺上打印結(jié)果為

          Area?60.480000?Perimeter?32.800000

          命名返回值

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

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

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

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

          空白符

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

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

          下面的程序我們只用到了函數(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)?//?返回值周長被丟棄
          ????fmt.Printf("Area?%f?",?area)
          }

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

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

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

          上一教程 - 常量

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


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

          作者:Nick Coghlan[5]譯者:Junedayday[6]校對: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/



          推薦閱讀


          福利

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

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码电影网 | 麻豆传媒无码 | 国产在线新址 | 日穴视频| 中文日韩欧美 |