函數是程式設計語言的一個基本的代碼塊,邏輯上用于執行一些特定任務。函數是代碼重用的最基本的例子,它把程式中一些頻繁使用的操作抽取出來組成一個獨立的代碼快,通過函數調用來避免重複編寫這部分代碼。
函數
Go語言中沒有類這個概念,是以函數就成了它最基本的組織機關。Go語言中函數的基本概念同其他程式設計語言。
Go語言中最少需要有
main()
函數,這一點同C。
Go語言标準庫中提供了廣泛的内置函數,這裡介紹的主要是自定義函數。
函數定義文法如下:
func function_name([parameter list]) [return_types] {
// function body
}
複制
-
func
函數聲明關鍵字
-
function_name
函數名稱,自定義,命名規則同變量命名規則
-
parameter_list
參數清單:參數類型、順序、參數個數,可選
-
return_types
傳回類型,注意加了s,Go的函數允許多個傳回值,是以需要指定多個傳回類型
注:Go語言中允許将函數作為參數傳遞及将函數作為傳回值。這一點同Python,這是實作閉包的基礎。
函數調用使用函數名,并傳入實參即可。
執行個體:
package main
import "fmt"
func max(n1, n2 int) int {
if n1 > n2 {
return n1
} else {
return n2
}
}
func main() {
fmt.Print(max(4, 8))
}
複制
函數參數傳遞包括值傳遞和引用傳遞等概念,這一點上Go和其他語言一緻。預設情況下,Go語言使用值傳遞。
遞歸函數
遞歸指的是一個函數不斷調用自身。尾遞歸指的是在return 語句中遞歸調用自身。在一些沒有循環的程式設計語言中,使用尾遞歸來實作循環。
Go語言支援遞歸。
執行個體(斐波那契數列,尾遞歸):
func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1)
}
複制
方法
方法其實是屬于面向對象的一個概念,類中的函數被稱作方法。
Go語言中沒有類,但也有方法這個概念。
Go語言中的方法指的是包含了接受者的函數,接收者可以是命名類型或者結構體的一個值或者指針。所有給定類型的方法都屬于該類型的方法集。
方法的定義和函數定義是不一樣的,文法如下:
func (variable_name, variable_data_type) function_name() [return_type] {
// method body
}
複制
下面這個執行個體來自菜鳥教程:
package main
import (
"fmt"
)
/* 定義結構體 */
type Circle struct {
radius float64
}
func main() {
var c1 Circle
c1.radius = 10.00
fmt.Println("圓的面積 = ", c1.getArea())
}
//該 method 屬于 Circle 類型對象中的方法
func (c Circle) getArea() float64 {
//c.radius 即為 Circle 類型對象中的屬性
return 3.14 * c.radius * c.radius
}
// 圓的面積 = 314
複制
變量的作用域
具備以上概念之後,我們就可以讨論變量的作用域了。
作用域表示已經聲明的變量它再源代碼中起作用的範圍。
- 函數内部定義的變量稱為局部變量
- 函數外部定義的程式設計稱為全局變量
- 函數定義中的變量稱為形式參數
局部變量
因為Go語言以函數作為基本組織機關,是以,局部變量指的是函數内部的變量,局部變量僅在函數體内有效。
全局變量
因為Go語言以函數作為基本組織機關,是以,全局變量指的是函數外部的變量,全局變量可以在整個包甚至外部包中中的任何函數中使用。
形式參數
形參相當于一個占位符,它的值由實參指定。從作用域上來講,形參屬于局部變量。
你可以這麼記憶,花括号内的變量僅在花括号内它被定義後有效,被稱為局部變量。這在所有語言中都是通用的。