iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

跟著 Go 實戰聖經 一起自學 Go系列 第 24

DAY 24 Go 語言 函式 (function) 呼叫及參數

  • 分享至 

  • xImage
  •  

昨天了解在 Go 語言中函式 (function) 介紹及宣告函式,今天來了解如何呼叫函式及函式參數。

呼叫函式

當我們宣告好一個函式,要如何執行函式呢?那就是要在需要使用的地方呼叫它,不然如果都沒有呼叫函式,你宣告的函式就會毫無用武之地,並不會自己執行。
函式可以呼叫其他函式,也可以呼叫自己,只要在某地呼叫函式,控制權便會轉移到被呼叫的函式本身,當被呼叫的函式執行完畢時(執行到右大括號 } 時),控制權才會轉移回本來的位置。

函式名稱(參數 1, 參數 2...) // 若無參數就是()

範例 1:

package main

import "fmt"

func printMyFavorite() {
    myFavorite := "奇犽"
    fmt.Println("我最喜歡的角色是:", myFavorite)
}

func main(){}

範例 1(執行結果):


咦~啊怎麼沒有東西???原來是因為我直接現場犯了上面說的錯誤,那就是我宣告了 printMyFavorite 函式,但我沒有在任何地方呼叫這個函式,那 printMyFavorite 函式便不會執行,當然不會印出我們預期的:「我最喜歡的角色是: 奇犽」字樣了。

正確寫法如下,且順便加上了控制權轉移的打印:

範例 2:

package main

import "fmt"

func printMyFavorite() {
    fmt.Println("控制權轉移到 printMyFavorite 函式")
    myFavorite := "奇犽"
    fmt.Println("我最喜歡的角色是:", myFavorite)
}

func main(){
    fmt.Println("控制權本來在 main 函式")
    printMyFavorite()  // 呼叫 printMyFavorite 函式,控制權暫時轉移給 printMyFavorite 函式,待執行完畢控制權再回來
    fmt.Println("控制權回到 main 函式")
}

範例 2(執行結果):

控制權本來在 main 函式
控制權轉移到 printMyFavorite 函式
我最喜歡的角色是: 奇犽
控制權回到 main 函式

函式參數

函式的參數決定你要把哪些引數或值傳給函式,參數可以有一個也可以有很多個。參數其實就等於活在函式內的區域變數,它的作用範圍只限於函式內部。

參數跟引數的差別

當定義函式寫下 printMyFavorite(name string, age int) ,括弧裡的 name, age 就是 參數 。在呼叫函式時寫下 printMyFavorite("奇犽", 12),括弧裡的 "奇犽", 12 就是 引數 。特別需注意的是,引數傳入的型別順序, 必須 與參數定義相同。

補充:
利用變數當引數也是 OK 的,只要傳入的變數型別符合,變數的值就會賦予參數且帶入函式。

範例 3:

package main

import "fmt"

func printMyFavorite(name string, age int) {
    fmt.Println("我最喜歡的角色是:", name, ", 他今年", age, "歲。")
}

func main(){
    printMyFavorite("奇犽", 12)
}

範例 3(執行結果):

我最喜歡的角色是: 奇犽 , 他今年 12 歲。

若是調皮的你故意把引數 "奇犽", 12 改成, 12, "奇犽" ,便會出現型別不正確的錯誤。

./main.go:1057:21: cannot use 12 (untyped int constant) as string value in argument to printMyFavorite
./main.go:1057:25: cannot use "奇犽" (untyped string constant) as int value in argument to printMyFavorite

今天了解了在 Go 語言中,如何呼叫函式及函式參數,明天繼續來了解函式傳回值的眉眉角角,那我們明天見~~


上一篇
DAY 23 Go 語言 函式 (function) 介紹及宣告函式
下一篇
DAY 25 Go 語言 函式 (function) 傳回值
系列文
跟著 Go 實戰聖經 一起自學 Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言