iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

golang後端入門分享系列 第 14

Day14-Go函式function

前言

在此篇文章之前,大部分的程式碼都是建立在主函式 (main function) 中,但隨著需求更加複雜,專案規模越來越大,若是將所有功能都包在主函式裡頭,那可讀性會很差,所以程式設計師撰寫函式以來分離程式碼,將功能切出來,獨立寫成一個函式,也實現程式碼共用的基礎。

撰寫函式

這裡先介紹一個簡單的函式如何撰寫:

package main
 
import (
   "fmt"
)
 
func hello() {
   fmt.Println("Hello Rookie")
}
func main() {
   hello() // Hello Rookie
}

這是一個很簡單的函式,我們將印出的功能包在 hello 這個函式裡頭,最後在主程式裡呼叫 hello 這個函式,來達到相同的目的,我們下面接著示範更多函式的功能。

撰寫函式(輸入參數)
這邊示範如何將參數帶入函式,這會使得能夠更靈活使用函式:

package main
 
import (
   "fmt"
)
 
func hello(name string) {
   fmt.Println("Hello", name)
}
func main() {
   hello("Jack") // Hello Jack
   hello("Zhen") // Hello Zhen
}

撰寫函式(輸入多個參數)

當然函式也不是只能帶入一個參數,可以帶入多個參數,這些參數型態也是可以依照自己需求調整:

package main
 
import (
   "fmt"
)
 
func hello(name1, name2 string) {
   fmt.Println("Hello", name1, "and", name2)
}
func main() {
   hello("Jack", "Zhen") // Hello Jack and Zhen
}

撰寫函式(輸入不定長度參數)

Go 語言的函式也支援輸入不定長度的參數:

package main
 
import (
   "fmt"
)
 
func add(x ...int) {
   var total int
   for _, xi := range x {
       total += xi
   }
   fmt.Println(total)
}
func main() {
   add(1,2,3,4,5) // 15
}

撰寫函式(回傳return)

大部分情況下,我們通常不會直接印出值來,而是以回傳值來取得自己要的數據,這時就可以用 return 來實現:

package main
 
import (
   "fmt"
)
 
func add(x, y int) int{
   return x + y
}
func main() {
   fmt.Println(add(1, 2) == 3) // true
}

撰寫函式(回傳命名)

你也可以對回傳值命:

package main
 
import (
   "fmt"
)
 
func add(x, y int) (z int){
   z = x + y
   return
}
func main() {
   fmt.Println(add(1, 2) == 3) // true
}

init函式

init 函式是個特殊的函示,如果一段程式碼內包含著 init 函式,則在執行整個程式碼時,會優先值些 init裡的程式碼,通常需要初始化一些外部資源時,會將這些程式碼寫在init 函式裡,以下是 Go 官方網站的例子:

func init() {
   if user == "" {
       log.Fatal("$USER not set")
   }
   if home == "" {
       home = "/home/" + user
   }
   if gopath == "" {
       gopath = home + "/go"
   }
   // gopath may be overridden by --gopath flag on command line.
   flag.StringVar(&gopath, "gopath", gopath, "override default GOPATH")
}

結語

今天介紹 Go 語言基本的函示撰寫方法,函式撰寫變化其實還有很多種,可以因應自己的需求做調整,希望幾天介紹能使各位讀者對 Go 語言的函式有初步的了解,感謝您今天的閱讀!


上一篇
Day13-Go方法method
下一篇
Day15-Go介面interface
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言