func 函數名(形參列表) (返回值類型列表) {
執行語句......
return 返回值列表
}
函數的說明形參列表:表示函數的輸入
創新互聯公司長期為成百上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為天涯企業提供專業的成都網站設計、網站建設,天涯網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。函數中的執行語句:表示為了實現某一功能的代碼塊
return:函數的返回值。函數可以有返回值,也可以沒有。Go語言函數支持多個返回值,這一點是其他語言沒有的:(1)如果返回多個值時,在接收時,希望忽略某個返回值,則使用 _ 符號表示占位忽略(2)如果返回值只有一個,(返回值類型) 可以不寫 ()
函數的形參列表可以是多個,返回值列表也可以是多個
形參列表和返回值列表的數據類型可以是值類型和引用類型
函數的命名遵循標識符的命名規范,首字母不能是數字,首字母大寫該函數可以被本包文件和其他包文件使用,首字母小寫,只能被本包文件使用,其它包文件不能使用。
函數中的變量是局部的,函數外不生效
基本數據類型和數組默認都是值傳遞的,即進行值拷貝。在函數內修改,不會影響到原來的值
如果希望函數內的變量能修改函數外的變量,可以傳入變量的地址&,函數內以指針的方式操作變量
在Go中,函數也是一種數據類型 ,可以賦值給一個變量,則該變量是一個函數類型的變量了。通過該變量可以對函數調用。
函數既然是一種數據類型,因此在Go中函數可以作為形參,并調用
為了簡化數據類型定義,Go支持自定義數據類型
基本語法:type 自定義數據類型名 數據類型 //理解:相當于一個別名
示例:type myInt int //這時myInt就等價int來使用了
示例:type mySum func (int,int) int //這時mySum就等價于一個函數類型func (int,int) int
支持對函數返回值命名,這個時候return不必指定返回哪個變量了
package main
import (
"fmt"
)
func cal(n1 int, n2 int) (sum int, sub int) {sum = n1 + n2
sub = n1 - n2
return //這個時候return不必指定返回哪個變量了
}
func main() {fmt.Println(cal(5, 4))
}
1.4 Go支持可變參數
//支持0到多個參數
func sum(args... int) (sum int) {}
支持1到多個參數
func sum(n1 int, args... int) (sum int) {}
package main
import (
"fmt"
)
//Go可變參數示例:支持0到多個參數
func sum0(args... int) (sum int) {sum = 0
//遍歷args
for i := 0; i< len(args); i++ {sum += args[i]
}
return
}
//Go可變參數示例:支持1到多個參數
func sum1(n1 int,args... int) (sum int) {sum = n1
//遍歷args
for i := 0; i< len(args); i++ {sum += args[i]
}
return
}
func main() {fmt.Println(sum0()) //sum0調用可以不傳入任何參數
fmt.Println(sum1(10,-1,5,5)) //sum1調用至少傳入一個參數
}
init函數每一個源文件都可以包含一個init函數,init函數主要的做用就是完成一些初始化工作,該函數會在main函數之前執行,被Go運行框架調用,也就是說init會在main函數之前被調用。
package main
import "fmt"
func init(){fmt.Println("init print......")
}
func main(){fmt.Println("main print......")
}
如果一個文件同時包含全局變量定義、init函數和main函數,則執行流程為:全局變量定義—>init函數—>main函數
匿名函數匿名函數使用方式1
在定義匿名函數時就直接調用,這種方式匿名函數只能調用一次。
package main
import "fmt"
func main() {res1 := func(n1 int, n2 int) int {return n1 + n2
}(10, 20) //這里的(10, 20)就是直接調用函數了
fmt.Println("res1 = ", res1)
}
匿名函數使用方式2
將匿名函數賦給一個變量(函數變量),再通過該變量來調用匿名函數
package main
import "fmt"
func main() {a := func(n1 int, n2 int) int {return n1 + n2
}
res1 := a(10, 20) //這里通過 函數變量a 來調用匿名函數
fmt.Println("res1 = ", res1)
}
匿名函數使用方式3:全局匿名函數
如果將匿名函數賦給一個全局變量,那么這個匿名函數,就成為一個全局匿名函數,可以再程序有效。
package main
import "fmt"
var (
Func1 = func(n1 int, n2 int) int {return n1 + n2
}
)
func main() {res1 := Func1(10, 20)
fmt.Println("res1 = ", res1)
}
函數的defer在函數種,程序員經常需要創建資源(比如:數據庫連接、文件句柄、鎖等),為了在函數執行完畢后,及時的釋放資源,Go的設計者提供defer(延時機制)。
(1)當go執行到一個defer時,不會立即執行defer后的語句,而是將defer后的語句壓入到一個棧種,然后繼續執行函數的下一個語句
(2)當函數執行完畢后,再從defer棧中,依次從棧頂取出語句執行(注:遵守棧 先入后出的機制)
(3)在defer將語句放入到棧時,也會將相關的值拷貝同時入棧
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享名稱:Golang數據類型-函數(六)-創新互聯
當前URL:http://vcdvsql.cn/article4/ceogie.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、營銷型網站建設、面包屑導航、App設計、ChatGPT、小程序開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯