久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Go 語(yǔ)言系列15:函數(shù)

 菜籽愛編程 2022-04-27

函數(shù) 是基于功能或邏輯進(jìn)行封裝的可復(fù)用的代碼結(jié)構(gòu),。將一段功能復(fù)雜,、很長(zhǎng)的一段代碼封裝成多個(gè)代碼片段(即函數(shù)),有助于提高代碼可讀性和可維護(hù)性,。由于 Go 語(yǔ)言是編譯型語(yǔ)言,,所以函數(shù)編寫的順序是無(wú)關(guān)緊要的。

函數(shù)的聲明

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

func function_name(parameter_list) (result_list) {
    body
}

函數(shù)的聲明使用 func 關(guān)鍵詞,,后面依次接 function_name(函數(shù)名)parameter_list(參數(shù)列表) ,, result_list(返回值列表) 以及 函數(shù)體

  • 形式參數(shù)列表描述了函數(shù)的參數(shù)名以及參數(shù)類型,,這些參數(shù)作為局部變量,,其值由參數(shù)調(diào)用者提供,函數(shù)中的參數(shù)列表和返回值并非是必須的,。
  • 返回值列表描述了函數(shù)返回值的變量名以及類型,,如果函數(shù)返回一個(gè)無(wú)名變量或者沒有返回值,,返回值列表的括號(hào)是可以省略的。
  • 如果有連續(xù)若干個(gè)參數(shù)的類型一致,,那么只需在最后一個(gè)參數(shù)后添加該類型,。
package main

import "fmt"

// 函數(shù)返回一個(gè)無(wú)名變量,返回值列表的括號(hào)省略
func sum(x int, y int) int {
 return x + y
}

// 無(wú)參數(shù)列表和返回值
func printHello() {
 fmt.Println("Hello")
}

// 參數(shù)的類型一致,,只在最后一個(gè)參數(shù)后添加該類型
func sub(x , y int) int {
 return x - y
}

func main() {
 fmt.Println("3 + 4 =", sum(34))
 printHello()
 fmt.Println("5 - 2 =", sub(52))
}

運(yùn)行該程序輸出如下:

3 + 4 = 7
Hello
5 - 2 = 3


可變參數(shù)

上面的程序參數(shù)個(gè)數(shù)都是固定的,,在 Go 中我們也能像 Python 中一樣實(shí)現(xiàn)可變參數(shù)的函數(shù)。

多個(gè)類型一致的參數(shù)

在參數(shù)類型前面加 ... 表示一個(gè)切片,,用來(lái)接收調(diào)用者傳入的參數(shù),。注意,如果該函數(shù)下有其他類型的參數(shù),,這些其他參數(shù)必須放在參數(shù)列表的前面,,切片必須放在最后。

package main

import "fmt"

func sum(args ...int) int {
 sum := 0
 for _,x := range args{
  sum += x
 }
 return sum
}

func main() {
 fmt.Println(sum(34567)) // 25
}

多個(gè)類型不一致的參數(shù)

如果傳多個(gè)參數(shù)的類型都不一樣,,可以指定類型為 ...interface{} ,,然后再遍歷。

package main

import "fmt"

func PrintType(args ...interface{}) {
 for _, arg := range args {
  switch arg.(type) {
  case int:
   fmt.Println(arg, "type is int.")
  case string:
   fmt.Println(arg, "type is string.")
  case float64:
   fmt.Println(arg, "type is float64.")
  default:
   fmt.Println(arg, "is an unknown type.")
  }
 }
}

func main() {
 PrintType(13.14"abc")
}

運(yùn)行上面的程序輸出如下:

type is int.
3.14 type is float64.
abc type is string.


解序列

使用 ... 可以用來(lái)解序列,,能將函數(shù)的可變參數(shù)(即切片)一個(gè)一個(gè)取出來(lái),,傳遞給另一個(gè)可變參數(shù)的函數(shù),而不是傳遞可變參數(shù)變量本身,。

package main

import "fmt"

func sum(args ...int) int {
 res := 0
 for _,value := range args {
  res += value
 }
 return res
}

func Sum(args ...int) int {
 return sum(args...)
}

func main() {
 fmt.Println(Sum(456))   // 15
}


函數(shù)的返回值

當(dāng)函數(shù)沒有返回值時(shí),,函數(shù)體可以使用 return 語(yǔ)句返回,。在 Go 中一個(gè)函數(shù)可以返回多個(gè)值,。

package main

import "fmt"

func RectInfo(len, width int) (intint) {
 per := 2 * (len + width)
 area := len * width
 return area, per
}

func main() {
 area, perimeter := RectInfo(105)
 fmt.Printf("area = %d, perimeter = %d", area, perimeter)
}

運(yùn)行該程序輸出如下:

area = 50, perimeter = 30

當(dāng)然,在 Go 中支持返回帶有變量名的值,??梢詫⑸厦娴暮瘮?shù)修改如下:

func RectInfo(len, width int) (area int, perimeter int) {
    // 不使用 := 因?yàn)橐呀?jīng)在返回值那里聲明了
 area = len * width
 perimeter = 2 * (len + width)
    // 直接返回即可
 return
}


匿名函數(shù)

沒有名字的函數(shù)就叫 匿名函數(shù) ,,它只有函數(shù)邏輯體,而沒有函數(shù)名,。匿名函數(shù)只擁有短暫的生命,,一般都是定義后立即使用。

func (parameter_list) (result_list) {
    body
}

參考文獻(xiàn):

[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序設(shè)計(jì)語(yǔ)言, Translated by 李道兵, 高博, 龐向才, 金鑫鑫 and 林齊斌, 機(jī)械工業(yè)出版社, 2017.

??周一至周五更新,,期待你的關(guān)注??

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多