Golang中的自定義函式
不管是面向過程的程式設計,還是面向物件的程式設計,都離不開函式的概念,分別是, 引數
, 函式名
, 返回值
。接下來我們看看Go語言在這三個方面是做怎麼操作的吧。
引數
談到引數,我們在寫函式或者是類中的方法的時候都需要考慮我們應該傳遞怎樣的引數,或者是是否需要引數。
引數首先分為無參函式有參。無參也就是沒有引數,也就不用寫了。
有參
func functionTest() {# 小括號內就是用來放參數的 # 函式體內 }
Go語言是強資料型別的語言,引數是要指定型別的不然就報錯。 func
是函式的宣告關鍵字。
func 函式名(引數列表) 返回值型別 {函式體內部}
func addTwoNumber(a int, b int) int { return a + b }
我們這裡寫了一個很簡單的函式,把兩個數相加並返回結果
這裡我們要注意,引數的型別是寫在引數名的後面,和變數定義是一樣的。
func addTwoNumber(a int, b int)(sum int) { return a+b }
返回值的定義,是可以給返回值取一個名稱的,還有一點是和其他的程式語言不一樣的是在Go語言中函式的返回值可以有多個的。
func addTwoNumber(a int, b int)(int, int) { return a+b, a-b }
同時可以給返回值取一個別名
func addTwoNumber(a int, b int)(sum, dif int) { return a+b, a-b }
像這樣給返回值取完名字後可以給返回值直接賦值
func addTwoNumber(a int, b int)(sum, dif int) { sum = a+b dif = a-b return }
同樣這樣也是可以直接返回sum,和dif兩個值的。
同時Go語言也具有和c語言一樣的匿名引數只做佔位的作用,Go語言還不僅如此,還有宣告變數可以佔位的功能。
func addTwoNumber(int, b int)(int, int) { return b, b }
func main() { a, _, c := 1, 2, 3 fmt.Println(a, c) }
其中 _
是用來佔位的,並不可以使用。
可變引數列表
func sum(numbers ...int) int { s := 0 for i := range numbers{ s += i } return s } func main() { fmt.Println(sum(1,2,3,4,5)) }
像這樣我們就可以傳給 sum
函式多個值了。
Go中的值傳遞,地址傳遞
在很多語言中,在呼叫函式或者是方法的時候,都是要考慮我們是傳遞 值
還是傳遞 地址
(在某些語言中敘述的是傳遞 引用
),到底是傳遞值還是傳遞地址這一概念是非常重要的,我們應該弄清楚。
我們用一個交換數的例子來講解:
值傳遞
package main import "fmt" func swap(x, y int) { var temp = x x = y y = temp } func main() { a,b := 1,2 swap(a,b) fmt.Println(a, b) }

值傳遞
地址傳遞
package main import "fmt" func swap(a, b *int) { var temp = *a *a = *b *b = temp } func main() { a,b := 1,2 swap(&a,&b) fmt.Println(a, b) }

地址傳遞