Go語言中函數的引數就是形參,它是區域性變數,其值由引數呼叫者提供;如果相鄰的幾個形參的型別相同,那麼可以省略前幾個引數的型別,只需要寫最後一個引數的型別即可,語法「func funcName(形參1, 形參2 引數型別1, 形參3,形參4 引數型別2, ...)(返回值列表){ //執行語句...return 返回值列表}」。
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
Go語言函數引數
Go 語言 中 函數 的引數,為形式引數,即如果我們通過傳值的方式,傳遞的引數其實是實際引數的一份拷貝,而不是真正的實際引數。形參是區域性變數,其值由引數呼叫者提供。
在 Go 語言中,如果相鄰的幾個函數引數的型別相同,那麼我們可以省略前幾個引數的型別,只需要寫最後一個引數的型別即可。
func funcName(param1, param2 paramType1, param3, param4 paramType2, ...)(returnVal returnType){ // 執行語句...
return 返回值列表
}
登入後複製
說明
引數 param1 和引數 param2 的型別相同,那麼我們就可以省略 param1 後面的引數型別,直接在 param2 後面寫型別。
引數 param3 和引數 param4 的型別相同,那麼我們就可以省略 param3 後面的引數型別,直接在 param4 後面寫型別。
returnVal returnType
為返回值列表,描述了函數返回值的變數名以及型別,如果函數返回一個無名變數或者沒有返回值,返回值列表的括號是可以省略的。
案例
用函數,實現尋找兩個數的最大公約數
package main
import (
"fmt"
)
func gcdNormal(x, y int) int {
var n int
if x > y {
n = y
} else {
n = x
}
for i := n; i >= 1; i-- {
if x%i == 0 && y%i == 0 {
return i
}
}
return 1
}
func main() {
//用函數,實現計算兩個數的最大公約數
gcd := gcdNormal(10,20)
fmt.Println("Gcd =", gcd)
}
登入後複製
程式執行後,控制檯輸出如下:
我們定義了一個函數 gcdNormal,傳入兩個 int 型別 的引數 a 和 b,函數返回一個 int 型別的 變數。該函數使用了窮舉法實現了求引數 a 和 引數 b 的最大公約數的邏輯,因為引數 a 和引數 b 的型別都是 int 型別,因此我們省略了引數 a 後面的型別,直接寫在引數 b 後面。
在 main() 函數裡面,我們呼叫了 gcdNormal 函數,並傳入了兩個引數 10 和 20,使用 gcd 變數來接受 gcdNormal 函數返回的值,最後使用 Println() 函數列印最後的結果。
函數引數是形參
Go 語言的函數引數是形參,對函數引數的修改不會影響實參
package main
import (
"fmt"
)
func change(a int) {
a += 100
}
func main() {
//Go語言的函數引數是函數引數,對函數引數的修改不會影響實參
a := 10
change(a)
fmt.Println("a =", a)
}
登入後複製
程式執行後,控制檯輸出如下:
我們定義了一個函數 change(),傳入一個 int 型別的引數 a,在函數體中,對該函數的引數實現加 100 的操作。
在 main() 函數中,呼叫該函數,並傳入變數 a,執行完 change() 函數之後,我們再次列印變數 a 的值,發現 a 的值還是10,並不是加 100 之後的 110。
因為在 Go語言中,函數的引數是形式引數,即是實參的拷貝,所以修改的不是實參,所以 a 的值不會改變。
通過函數引數修改實參
Go 語言的函數要通過函數引數修改實參,必須要使用指標型別
package main
import (
"fmt"
)
func change(a *int) {
*a += 100
}
func main() {
//Go語言的函數要通過函數引數修改實參,必須要使用指標型別
a := 10
change(&a)
fmt.Println("a =", a)
}
登入後複製
我們定義了一個函數 change(),傳入一個 int 指標型別的引數 a,在函數體中,對該函數的引數實現加 100 的操作。
在 main() 函數中,呼叫該函數,並傳入變數 a 的地址,執行完 change() 函數之後,我們再次列印變數 a 的值,發現 a 的值被增加了 100 變成了 110。
這裡的 change() 函數因為傳入的是 a 的地址,接著我們在 change() 函數裡面通過指標運運算元,獲取 a 的地址所指向的變數,再修改其值,其實修改的就是變數 a 本身的值。
Go語言函數引數總結
Go 語言中函數的引數,為形式引數,即如果我們通過傳值的方式,傳遞的引數其實是實際引數的一份拷貝,而不是真正的實際引數。
在 Go 語言中,如果相鄰的幾個函數引數的型別相同,那麼我們可以省略前幾個引數的型別,只需要寫最後一個引數的型別即可。
更多程式設計相關知識,請存取:!!
以上就是golang形參有什麼要求的詳細內容,更多請關注TW511.COM其它相關文章!