GO-函式學習
函式的宣告
-
go的函式宣告通過
func
這個關鍵字,params
是他的形參設定,result
是他的return值 -
當設定
params
後呼叫func
必須傳入對應函式引數,當設定result
後也必須有return
,且params
和result
型別符合宣告的
func name(params) (result) { } // 普通函式的宣告 func getMax(num1 int, num2 int) (min int, max int) { // 推薦直接賦值給需要return的值 if num1 > num2 { max = num1 min = num2 } else { max = num2 min = num1 } return // 每一個函式必須要有return }
可變引數型別函式
- 可變引數一般被放置在函式列表的末尾,前面是固定引數列表,當沒有固定引數時,所有變數就將是可變引數。
// 可變引數型別 func getArr(a ...int) (length int) { length = len(a) return } // 部分引數是可變引數 func getLen(a int, c ...int) (length int) { length = len(c) + a return }
函式的引數傳遞
函式的引數分為兩種:
- 實際引數(實參): 實參的本質是一個變數,它可以是變數名、陣列名、常數或者表示式,已實際佔用記憶體空間
- 形式引數(形參): 形參本質是一個名字,不佔用記憶體空間
// 實參 func shiCan(a int, b int) (result int){ result = a + b return } func main() { shiCan(1, 4) } // 形參 var a int =3 var b int = 5 func xingCan(a int, b int) (result int){ result = a + b return } func main() { xingCan() }
函式的引數的傳遞方式:
在 Golang 中函式呼叫引數均為值傳遞,函式在穿參的時候,都是以值的方式傳遞
例子一:(int型別)
func add(num int) (result int) { fmt.Println(&num) return num } func main() { num := 10 result := add(num) fmt.Println(&num) fmt.Println(result) }
例子二:(array型別)
func add(num [1]int) (result [1]int) { num[0] = 1 fmt.Println(num) // [1] return num } func main() { num := [...]int{10} result := add(num) fmt.Println(num) // [10] fmt.Println(result) }
例子三:(指標型別)
func modify(value *int) { value = nil fmt.Println(value) //0x0 } func main() { a := new(int) modify(a) fmt.Println(a) // 0xc000040780 }