Go語言的函數、方法和接口

函數

  • 在Go語言中,函數是第一類對象,我們可以將函數保持到變量中。具名函數是匿名函數的一種特例。
  • 當匿名函數引用了外部 作用域中的變量時就成了閉包函數,閉包函數是函數式編程語言的核心。
  • defer 語句延遲執行了一個匿名函數。因爲這個匿名函數捕獲了外部函數的 局部變量 ,這種函數我們一般叫閉包。
  • 傳參:
    Go語言中,如果以切片爲參數調用函數時,有時候會給人一種參數採用了傳引用的 方式的假象:因爲在被調用函數內部可以修改傳入的切片的元素。
    其實,任何可以 通過函數參數修改調用參數的情形,都是因爲函數參數中顯式或隱式傳入了指針參數。
    函數參數傳值的規範更準確說是隻針對數據結構中固定的部分傳值,例如字符串或切片對應結構體中的指針和字符串長度結構體傳值,但是並不包含指針間接指向的內容。

方法

方法是綁定到一個具體類型的特殊函數,Go語言中的方法是依託於類型的,必須在編譯時靜態綁定。

接口

  • 接口定義了方法的集合,這些方法依託於運行時的接口對象,因此接口對應的方法是在運行時動態綁定的。
  • Go語言的接口類型是延遲綁定,可以實現類似虛函數的多態功能。
  • Go語言中,對於基礎類型(非接口類型)不支持隱式的轉換,我們無法將一 個 int 類型的值直接賦值給 int64 類型的變量,也無法將 int 類型的值賦值給 底層是 int 類型的新定義命名類型的變量。Go語言對基礎類型的類型一致性要求 可謂是非常的嚴格,但是Go語言對於接口類型的轉換則非常的靈活。對象和接口之間的轉換、接口和接口之間的轉換都可能是隱式的轉換。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章