1. 程式人生 > >Golang學習筆記(十)函式申明及變數作用域

Golang學習筆記(十)函式申明及變數作用域

標準函式格式:func 函式名 (引數列表) (返回值列表)
func funcName (parametername1 type1,parametername2 type2...) (output1 type1,output2 type2...)
1、可以使用可變引數:func funcName(arg ...int)表示接受不定數量的int型別引數。
2、Golang的引數列表,如果相鄰的兩個或多個引數資料型別是一樣的,那麼只用在最後一個引數新增資料型別。
3、Golang可以返回多個值,函式申明時如果有返回值,必須在函式體中使用return關鍵字提供返回值。
4、返回值可以是返回資料的資料型別,或者是變數+變數型別的組合。
5、如果只有一個返回值且不申明返回值變數,那麼可以省略包括返回值的括號。
 

首先申明兩個全域性變數。

var a int = 7
var b int = 9

接著寫一段標準的函式:

func sum1(a, b int) int {
	a++
	b += 2
	c := a + b
	fmt.Printf("sum()中a=%d\n", a)
	fmt.Printf("sum()中b=%d\n", b)
	fmt.Printf("sum()中c=%d\n", c)
	return c
}

在main()中呼叫函式sum1(),將全域性變數a、b賦為引數,將返回c的值19,並打印出結果。

sum()中a=8
sum()中b=11
sum()中c=19

再來一個帶返回變數的例子:

func sum2(a, b int) (dd int) {
	a++
	b += 2
	c := a + b
	fmt.Printf("sum()中a=%d\n", a)
	fmt.Printf("sum()中b=%d\n", b)
	fmt.Printf("sum()中c=%d\n", c)
    dd = c
	return
}

這裡的return雖然什麼都沒有帶,但還是會返回dd的數值。

func sum2(a, b int) (dd int) {
	a++
	b += 2
	c := a + b
	fmt.Printf("sum()中a=%d\n", a)
	fmt.Printf("sum()中b=%d\n", b)
	fmt.Printf("sum()中c=%d\n", c)
	return c
}

如果寫成這樣,實際返回的其實也是dd,而不是c。

所以在函式中,可以直接將最後的值寫在返回引數中:

func sum3(a, b int) (c int) {
	a++
	b += 2
	c = a + b
	fmt.Printf("sum()中a=%d\n", a)
	fmt.Printf("sum()中b=%d\n", b)
	fmt.Printf("sum()中c=%d\n", c)
	return
}

PS:這時的c就不再用申明瞭,因為在返回引數裡已經申明過了。

多返回值的函式:

func sum4(a, b int) (c, d int) {
	a++
	b += 2
	c = a + b
	d = a * b
	return
}

這個函式執行後,必須要有兩個變數來接受返回值。

x,y = sum4(a, b)

如果只想取回其中一個變數而另外一個沒有用的話,可以用匿名變數_來接收。

_,c = sum4(a, b)

這麼來,只有c接受了sum4()函式的第二個返回值。