一篇文章帶你了解Go語言基礎之函數(shù)(上篇)
回復“Go語言”即可獲贈Python從入門到進階共10本電子書
前言
Hey,大家好呀,我是星期八,這次咱們繼續(xù)學習Go基礎之函數(shù)叭。
為什么需要函數(shù)
函數(shù),在所有編程語言中都叫函數(shù),Java,PHP,Python,JS等,統(tǒng)一都叫函數(shù)。
函數(shù)的作用
一般是這樣形容的:函數(shù)可以將重復的,或者特定功能的,封裝成一個方便調(diào)用的東西。
注:在Go中,函數(shù)是支持閉包的。
在沒有使用函數(shù)時
代碼
package mainimport "fmt"func main() {//模擬一個打開文件,寫入一行內(nèi)容進入文件,在關閉文件的功能var file_name = "a.txt" //文件名var w_content = "愛我中華" //寫入的內(nèi)容fmt.Println(fmt.Sprintf("打開 %s 文件",file_name))fmt.Println(fmt.Sprintf("向 %s 文件寫入了 %s ", file_name, w_content))fmt.Println(fmt.Sprintf("關閉 %s 文件",file_name))//如果再再向其他文件寫入內(nèi)容,還需要復制一次var file_name2 = "b.txt" //文件名var w_content2 = "中國威武" //寫入的內(nèi)容fmt.Println(fmt.Sprintf("打開 %s 文件",file_name2))fmt.Println(fmt.Sprintf("向 %s 文件寫入了 %s ", file_name2, w_content2))fmt.Println(fmt.Sprintf("關閉 %s 文件",file_name2))}
使用函數(shù)后
將相同功能封裝成函數(shù)。
package mainimport "fmt"func w_file(filename string, w_content string) {fmt.Println(fmt.Sprintf("打開 %s 文件", filename))fmt.Println(fmt.Sprintf("向 %s 文件寫入了 %s ", filename, w_content))fmt.Println(fmt.Sprintf("關閉 %s 文件", filename))}func main() {//將相同功能封裝成函數(shù)w_file("a.txt", "愛我中華")w_file("b.txt", "中國威武")}
上述代碼執(zhí)行的結(jié)果都如下

ps:但是可以明顯看到,使用函數(shù)將相同功能抽出來,代碼會變的簡單,整潔。
函數(shù)使用
函數(shù)名命名規(guī)則
函數(shù)命名盡量以駝峰命名,例如:getName,connectData等。
語法
在Go中,定義函數(shù)語言用到func關鍵字。
func 函數(shù)名([參數(shù)1 參數(shù)類型1,參數(shù)2 參數(shù)類型2,...]) [(返回值 返回值類型,...)]{邏輯代碼}//中括號表示可選參數(shù)
無參數(shù),無返回值
package mainimport "fmt"func say1() {fmt.Println("我終于會說話了...")}
有參數(shù),無返回值
func say2(c string) {fmt.Println("我終于會說" + c + "了")}
有或者無參數(shù),有返回值
func say3(c string) (string) {fmt.Println("我終于會說" + c + "了")return "哦耶"}
main函數(shù)
func main() {say1()say2("你好哇")result := say3("你好哇")fmt.Printf(result)}
結(jié)果

調(diào)用函數(shù)
函數(shù)名+括號調(diào)用函數(shù),如果有參數(shù)傳入相關參數(shù)即可。
package mainimport "fmt"func say() string{fmt.Println("我終于會說話了...")return ""}func main() {//函數(shù)名+括號調(diào)用函數(shù)say() //結(jié)果:我終于會說話了...}
注:如果函數(shù)有返回值,可以不接收。
函數(shù)參數(shù)特性
在Go中,如果函數(shù)參數(shù)都是統(tǒng)一類型,可以這樣寫。
//arg1, arg2, arg3, arg4參數(shù)類型都是stringfunc say(arg1, arg2, arg3, arg4 string) {fmt.Println("我終于會說話了...")}//arg1,arg2參數(shù)是int類型,arg4,arg4是string類型,func say(arg1, arg2, int, arg3, arg4 string) {//表示arg1, arg2, arg3, arg4參數(shù)類型都是stringfmt.Println("我終于會說話了...")}
大概意思就是,如果參數(shù)不寫類型,會以后面碰到的類型為準。
函數(shù)的...參數(shù)
...參數(shù),也叫可變長參數(shù),有點像Python中的*args。
功能是當不知道接收多少個參數(shù)時,接收多的參數(shù)會放在...中。
...參數(shù)需要放在最后面。
代碼
package mainimport "fmt"func say(name string, content ...string) {fmt.Println(content) //結(jié)果:[666 雙擊 ok 哦耶]fmt.Printf("%T\n", content) //結(jié)果:[]string,是切片類型fmt.Println("我是"+name, "我說了:")//循環(huán)切片for _, v := range content {fmt.Println(v)}}func main() {//函數(shù)名+括號調(diào)用函數(shù)say("張三", "666", "雙擊", "ok", "哦耶") //結(jié)果:我終于會說話了...}
結(jié)果如圖所示

注:參數(shù)是...類型的,他的值是一個切片類型。
函數(shù)的返回值
返回值是一個的
package mainimport "fmt"//返回值是一個func say1() string {return "ok"}
返回值是多個的,需要用括號括起來
//返回值是多個的,需要用括號括起來func say2() (int, string) {return 1, "ok"}
返回值是命名的
//返回值是命名的,不管是多個返回值還是一個返回值,都需要括號//如果是命名返回值,需要在邏輯代碼中,將變量賦值func say3() (a int, b string) {//邏輯代碼a = 18b = "666"/*直接return即可,不需要retrun a,breturn的默認就是 a 和 b不用跟上述返回一樣,返回具體值*/return}
main函數(shù)
func main() {s := say1()fmt.Println(s)a1, b1 := say2()fmt.Println(a1, b1)a2, b2 := say3()fmt.Println(a2, b2)}
結(jié)果

總結(jié)
上述我們學習了Go基礎之函數(shù)。如果在操作過程中有任何問題,記得下面討論區(qū)留言,我們看到會第一時間解決問題。
我是碼農(nóng)星期八,如果覺得還不錯,記得動手點贊一下哈。感謝你的觀看。
-------------------?End?-------------------

歡迎大家點贊,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入學習群請在后臺回復【入群】
萬水千山總是情,點個【在看】行不行
