這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
GO語言函數與C,JAVA等有點很大的區別,大致如下:
一、函數的定義
例如:
func max(a, b int) int{//返回a,b裡面最大的一個,而且要注意函數的參數和傳回值類型是怎麼定義的 if b>a{ return b } return a}
二、多值返回
GO語言中一個函數可以有多個傳回值。
舉個最簡單的例子
package mainimport ( "fmt")var a intfunc main() { b := []byte{1, 2, 3, 4} var x int for i := 0; i <</SPAN> len(b); { x, i = nextint(b, i)//最終的i的返回結果是len(b) fmt.Println(x) }}func nextint(b []byte, i int) (int, int) { x := 0 for ; i <</SPAN> len(b); i++ { x = x*10 + int(b[i]) } return x, i}運行結果是:1234
三、函數參數不定
樣本如下:
package mainimport ( "fmt")func main() { sum(1, 2) sum(1, 2, 3) //傳數組 nums := []int{1, 2, 3, 4} sum(nums...)}func sum(nums ...int) { fmt.Print(nums, " ") //輸出如 [1, 2, 3] 之類的數組 total := 0 for _, num := range nums { //要的是值而不是下標 total += num } fmt.Println(total)}
四、函數閉包
nextNum這個函數返回了一個匿名函數,這個匿名函數記住了nextNum中i+j的值,並改變了i,j的值,於是形成了一個閉包的用法,代碼如下:
package mainimport ( "fmt")func nextNum() func() int { i, j := 1, 1 return func() int { var tmp = i + j i, j = j, tmp return tmp }}//main函數中是對nextNum的調用,其主要是打出下一個斐波拉契數func main() { nextNumFunc := nextNum() for i := 0; i <</SPAN> 10; i++ { fmt.Println(nextNumFunc()) }}
五、命名傳回值
fan()是一個求階乘的函數,它的傳回值參數和類型在函數的定義的時候先聲明了。代碼如下:
package mainimport ( "fmt")func main() { fmt.Println(fan(5))//輸出5的階乘}func fan(x int) (result int) {//傳回值為result為int類型 if x == 0 || x == 1 { result = 1 } else { result = x * fan(x-1) } return//在此將result返回}