函數聲明
func 函數名(參數) 返回類型 {
函數體
}
函數調用
包名.函數名(參數) //如果調用包內的函數則直接 函數名.(參數)
package main
func main() {
a := 1
b := 2
var c int
c = sum(a, b)
println(c) //3
str1, str2, str3 := swap("bson", "json", "xml")
println(str1, str2, str3) //xml json bson
}
func sum(num1, num2 int) int {
var res int
res = num1 + num2
return res
}
func swap(x, y, z string) (string, string, string) {
return z, y, x
}
函數參數
值傳遞
值傳遞是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。
引用傳遞
引用傳遞是指在調用函數時將實際參數的地址傳遞到函數中,那麼在函數中對參數所進行的修改,將影響到實際參數。
上述的示例就是按值傳遞,下面示例演示了引用傳遞
package main
import "fmt"
func main() {
/* 定義局部變量 */
var a int = 100
var b int = 200
fmt.Printf("交換前,a 的值 : %d\n", a )
fmt.Printf("交換前,b 的值 : %d\n", b )
/* 調用 swap() 函數
* &a 指向 a 指針,a 變量的地址
* &b 指向 b 指針,b 變量的地址
*/
swap(&a, &b)
fmt.Printf("交換後,a 的值 : %d\n", a )
fmt.Printf("交換後,b 的值 : %d\n", b )
}
func swap(x *int, y *int) {
var temp int
temp = *x /* 保存 x 地址上的值 */
*x = *y /* 將 y 值賦給 x */
*y = temp /* 將 temp 值賦給 y */
}
函數用法
函數作爲值
函數定義後可作爲值來使用
閉包
閉包是匿名函數,可在動態編程中使用
方法
方法就是一個包含了接受者的函數