go語言學習(八、函數和方法)

函數是基本的代碼塊,用於執行一個任務

函數定義
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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章