go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名
引入
【1】為什么要使用函數(shù):
提高代碼的復(fù)用型,減少代碼的冗余,代碼的維護(hù)性也提高了
【2】函數(shù)的定義:
為完成某一功能的程序指令(語句)的集合,稱為函數(shù)。
【3】基本語法
func 函數(shù)名(形參列表)(返回值類型列表){執(zhí)行語句..return + 返回值列表 }【4】函數(shù)的定義和函數(shù)的調(diào)用案例:
package main import "fmt" // func 函數(shù)名(形參列表)(返回值類型列表){ // 執(zhí)行語句.. // return + 返回值列表 // } //自定義函數(shù):功能:兩個數(shù)相加: func cal (num1 int,num2 int) (int) { //如果返回值類型就一個的話,那么()是可以省略不寫的var sum int = 0sum += num1sum += num2return sum } func main(){//功能:10 + 20//調(diào)用函數(shù):sum := cal(10,20)fmt.Println(sum)// var num1 int = 10// var num2 int = 20//求和:// var sum int = 0// sum += num1// sum += num2// fmt.Println(sum)//功能:30 + 50var num3 int = 30var num4 int = 50//調(diào)用函數(shù):sum1 := cal(num3,num4)fmt.Println(sum1)//求和:// var sum1 int = 0// sum1 += num3// sum1 += num4// fmt.Println(sum1) }函數(shù)使用細(xì)節(jié)一:形參、返回值
【1】函數(shù):
對特定的功能進(jìn)行提取,形成一個代碼片段,這個代碼片段就是我們所說的函數(shù)
【2】函數(shù)的作用:提高代碼的復(fù)用性
【3】函數(shù)和函數(shù)是并列的關(guān)系,所以我們定義的函數(shù)不能寫到main函數(shù)中
【4】基本語法
(1)函數(shù)名:
遵循標(biāo)識符命名規(guī)范:見名知意 addNum,駝峰命名addNum
首字母不能是數(shù)字
首字母大寫該函數(shù)可以被本包文件和其它包文件使用(類似public)
首學(xué)母小寫只能被本包文件使用,其它包文件不能使用(類似private)
(2)形參列表:
形參列表:個數(shù):可以是一個參數(shù),可以是n個參數(shù),可以是0個參數(shù)
形式參數(shù)列表:作用:接收外來的數(shù)據(jù)
實(shí)際參數(shù):實(shí)際傳入的數(shù)據(jù)
(3)返回值類型列表:函數(shù)的返回值對應(yīng)的類型應(yīng)該寫在這個列表中
返回0個:
返回1個:
返回多個:
函數(shù)使用細(xì)節(jié)二:內(nèi)存分析
【5】通過例題感受內(nèi)存分析:
package main import "fmt" //自定義函數(shù):功能:交換兩個數(shù) func exchangeNum (num1 int,num2 int){ var t intt = num1num1 = num2num2 = t } func main(){ //調(diào)用函數(shù):交換10和20var num1 int = 10var num2 int = 20fmt.Printf("交換前的兩個數(shù): num1 = %v,num2 = %v \n",num1,num2)exchangeNum(num1,num2)fmt.Printf("交換后的兩個數(shù): num1 = %v,num2 = %v \n",num1,num2) }內(nèi)存分析:
函數(shù)使用細(xì)節(jié)三:不支持重載
【6】Golang中函數(shù)不支持重載
【7】Golang中支持可變參數(shù) (如果你希望函數(shù)帶有可變數(shù)量的參數(shù))
package main import "fmt" //定義一個函數(shù),函數(shù)的參數(shù)為:可變參數(shù) ... 參數(shù)的數(shù)量可變 //args...int 可以傳入任意多個數(shù)量的int類型的數(shù)據(jù) 傳入0個,1個,,,,n個 func test (args...int){//函數(shù)內(nèi)部處理可變參數(shù)的時候,將可變參數(shù)當(dāng)做切片來處理//遍歷可變參數(shù):for i := 0; i < len(args); i++ {fmt.Println(args[i])} } func main(){ test()fmt.Println("--------------------")test(3)fmt.Println("--------------------")test(37,58,39,59,47) }【8】基本數(shù)據(jù)類型和數(shù)組默認(rèn)都是值傳遞的,即進(jìn)行值拷貝。在函數(shù)內(nèi)修改,不會影響到原來的值。
【9】以值傳遞方式的數(shù)據(jù)類型,如果希望在函數(shù)內(nèi)的變量能修改函數(shù)外的變量,可以傳入變量的地址&,函數(shù)內(nèi)以指針的方式操作變量。從效果來看類似引用傳遞。
函數(shù)使用細(xì)節(jié)四:函數(shù)也是一種數(shù)據(jù)類型
【10】在Go中,函數(shù)也是一種數(shù)據(jù)類型,可以賦值給一個變量,則該變量就是一個函數(shù)類型的變量了。通過該變量可以對函數(shù)調(diào)用。
package main import "fmt" //定義一個函數(shù): func test(num int){fmt.Println(num) } func main(){//函數(shù)也是一種數(shù)據(jù)類型,可以賦值給一個變量 a := test//變量就是一個函數(shù)類型的變量fmt.Printf("a的類型是:%T,test函數(shù)的類型是:%T \n",a,test)//a的類型是:func(int),test函數(shù)的類型是:func(int)//通過該變量可以對函數(shù)調(diào)用a(10) //等價于 test(10) }【11】函數(shù)既然是一種數(shù)據(jù)類型,因此在Go中,函數(shù)可以作為形參,并且調(diào)用
(把函數(shù)本身當(dāng)做一種數(shù)據(jù)類型)
【12】為了簡化數(shù)據(jù)類型定義,Go支持自定義數(shù)據(jù)類型
基本語法: type 自定義數(shù)據(jù)類型名 數(shù)據(jù)類型
可以理解為 : 相當(dāng)于起了一個別名
例如:type mylnt int -----》這時mylnt就等價int來使用了.
例如:type mySum func (int , int) int -----》這時mySum就等價一個函數(shù)類型func(int, int) int
【13】支持對函數(shù)返回值命名
傳統(tǒng)寫法要求:返回值和返回值的類型對應(yīng),順序不能錯
升級寫法:對函數(shù)返回值命名,里面順序就無所謂了,順序不用對應(yīng)
總結(jié)
以上是生活随笔為你收集整理的go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: reactjs入门示例
- 下一篇: k8s argo workflow获取登