1. 程式人生 > 其它 >Go函式和方法

Go函式和方法

一、函式

    函式是基本的程式碼塊,用於執行一個任務。

    go語言至少有個main()函式

    1)函式定義

func function_name( [parameter list] ) [return_types] {
   函式體
}

      func:宣告這是一個函式
      function_name:函式名稱,函式名和函式列表一起構成了函式簽名
      parameter list:引數列表,
      return_types:返回型別,不是必須的,當沒有返回值時,可以不指定返回型別,也可以返回多個值,如(string,string)
      函式體:函式定義的程式碼集合

    

    常用函式用法:

// 函式多參無返回值
func func_name(a,b int, c string){}
// 函式無參無返回值
func func_name(){}
// 單個返回值
func func_name(s string) string{}
// 多個返回值
func func_name (s string) (string,int){}
// 命名返回引數
func func_name(s string) (result string){
    ...
    result=1
    return
}
// 可變引數,可變引數只能做為函式引數存在,並且是最後一個引數
func func_name(s string,args ...int
){} // 匿名函式,呼叫:f(1,2) f := func(x,y int) int { return x + y }

    2)函式引數

      函式如果使用引數,該變數可稱為函式的形參。

      形參就像定義在函式體內的區域性變數。

      呼叫函式,可以通過兩種方式來傳遞引數:

傳遞型別描述
值傳遞 值傳遞是指在呼叫函式時將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。
引用傳遞 引用傳遞是指在呼叫函式時將實際引數的地址傳遞到函式中,那麼在函式中對引數所進行的修改,將影響到實際引數。

      預設情況下,Go 語言使用的是值傳遞,即在呼叫過程中不會影響到實際引數

    3)遞迴函式

      遞迴,就是在執行的過程中呼叫自己

      Go語言支援遞迴,注意在使用遞迴時,要設定退出條件,避免陷入死迴圈

func recursion() {
   recursion() /* 函式呼叫自身 */
}

func main() {
   recursion()
}

    4)defer

      Go語言的 defer 語句會將其後面跟隨的語句進行延遲處理

      在 defer 歸屬的函式即將返回時,將延遲處理的語句按 defer 的逆序進行執行,也就是說,先被 defer 的語句最後被執行,最後被 defer 的語句,最先被執行。

      關鍵字 defer 的用法類似於面向物件程式語言 Java 和 C# 的 finally 語句塊,它一般用於釋放某些已分配的資源,典型的例子就是對一個互斥解鎖,或者關閉一個檔案

      defer關鍵字特性:

        1. 關鍵字 defer 用於註冊延遲呼叫。
        2. 這些呼叫直到 return 前才被執。因此,可以用來做資源清理。
        3. 多個defer語句,按先進後出的方式執行。
        4. defer語句中的變數,在defer宣告時就決定了

      defer用途:

        1. 關閉檔案控制代碼
        2. 鎖資源釋放
        3. 資料庫連線釋放

    5)init函式和mian函式

      ①:init函式

        go語言中init函式用於包(package)的初始化,該函式是go語言的一個重要特性

        init函式是用於程式執行前做包的初始化的函式,比如初始化包裡的變數等

        每個包可以擁有多個init函式,包的每個原始檔也可以擁有多個init函式

        對同一個go檔案的init()呼叫順序是從上到下的。

        對同一個包中不同檔案是按檔名字串比較“從小到大”順序呼叫各檔案中的init()函式

        不同包的init函式按照包匯入的依賴關係決定該初始化函式的執行順序

        init函式不能被其他函式呼叫,而是在main函式執行之前,自動被呼叫

      ②:main函式

        Go語言程式的預設入口函式(主函式)

    func main(){
        //函式體
    }

    6)函式表示式

      使用函式表示式實現三目運算

    // 函式表示式,實現三目運算
    // 格式:func() returnType {...}()
    i := 1
    j := 2
    k := func() int {
        if i > j {
            return i
        }
        return j
    }()
    fmt.Println(k)

      帶引數的函式表示式:

    h := func(a, b int) int {
        if a > b {
            return a
        }
        return b
    }(i, j)

二、方法