函數是基本的代碼塊,用於執行一個任務
函數定義
func:函數由 func 開始聲明
function_name:函數名稱,函數名和參數列表一起構成了函數簽名。
parameter list:參數列表,參數就像一個佔位符,當函數被調用時,你可以將值傳遞給參數,這個值被稱爲實際參數。參數列表指定的是參數類型、順序、及參數個數。參數是可選的,也就是說函數也可以不包含參數。
return_types:返回類型,函數返回一列值。return_types 是該列值的數據類型。有些功能不需要返回值,這種情況下 return_types 不是必須的。
函數體:函數定義的代碼集合
func function_name( [parameter list] ) [return_types] {
函數體
}
package main
import "fmt"
func main() {
// 調用普通函數
fmt.Println(swapString("大熊", "犀利的"))
// 值傳遞 輸出 1 0
a := 0
fmt.Println(add(a))
fmt.Println(a)
// 引用傳遞 輸出1 1
fmt.Println(add2(&a))
fmt.Println(a)
// 函數作爲值傳遞
fmt.Println(testFunctionParam(a, add))
// 閉包函數 輸出1 1 2 2
cl1 := testClosure()
cl2 := testClosure()
fmt.Println(cl1())
fmt.Println(cl2())
fmt.Println(cl1())
fmt.Println(cl2())
}
// 方法名swapString 接收兩個參數 str1 str2
// 函數體是對兩個字符做了反轉操作 返回兩個返回值
func swapString(str1, str2 string) (string, string) {
return str2, str1
}
/*
函數參數可以使用值傳遞、引用傳遞兩種方式
*/
// 值傳遞 在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數
func add(int1 int) int {
int1++
return int1
}
// 引用傳遞
func add2(int2 *int) int {
*int2++ // 該內存地址裏的值 ++
return *int2
}
/*
函數用法
*/
// 函數作爲另外一個函數的參數
// 先聲明一個函數類型
type fu func(int) int
// 該方法接收fu類型的參數
func testFunctionParam(a int, f fu) int {
return f(a)
}
// 閉包函數
func testClosure() func() int {
i := 0
return func() int {
i++
return i
}
}
方法 就是一個包含了接受者的函數
方法定義
一個方法就是一個包含了接受者的函數,接受者可以是命名類型或者結構體類型的一個值或者是一個指針。所有給定類型的方法屬於該類型的方法集。語法格式如下:(類似於java和php的類中的方法)
func (variable_name variable_data_type) function_name() [return_type]{
/* 函數體*/
}
package main
import "fmt"
type Circle struct {
radius float64
}
func main() {
var cc1 Circle
cc1.radius = 10.0
fmt.Println(cc1.getArea())
}
// 方法聲明 增加接受者定義 也就是方法屬於哪個結構體
// go沒有面向對象 struct就是其實現oop的方式
func (c Circle) getArea() float64 {
return c.radius * c.radius * 3.14
}