首頁 > 後端開發 > Golang > golang形參有什麼要求

golang形參有什麼要求

青灯夜游
發布: 2022-12-19 11:28:42
原創
4737 人瀏覽過

Go語言中函數的參數是形參,它是局部變量,其值由參數呼叫者提供;如果相鄰的幾個形參的類型相同,那麼可以省略前幾個參數的類型,只需要寫最後一個參數的類型即可,語法「func funcName(形參1, 形參2 參數類型1, 形參3,形參4 參數類型2, ...)(返回值列表){ / /執行語句...return 傳回值清單}」。

golang形參有什麼要求

本教學操作環境: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)
}
登入後複製

程式運行後,控制台輸出如下:

golang形參有什麼要求

我們定義了一個函數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)
}
登入後複製

程序運行後,控制台輸出如下:

golang形參有什麼要求

我們定義了一個函數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)
}
登入後複製

golang形參有什麼要求

我們定義了一個函數change(),傳入一個int 指標型別的參數a,在函數體中,對此函數的參數實作加100 的運算。

在main() 函數中,呼叫該函數,並傳入變數a 的位址,執行完change() 函數之後,我們再次列印變數a 的值,發現a 的值被增加了100 變成了110。

這裡的change() 函數因為傳入的是a 的位址,接著我們在change() 函數裡面透過指標運算符,取得a 的位址所指向的變量,再修改其值,其實修改的就是變數a 本身的值。

Go語言函數參數總結

Go 語言中函數的參數,為形式參數,也就是如果我們透過傳值的方式,傳遞的參數其實是實際參數的一份拷貝,而不是真正的實際參數。

在 Go 語言中,如果相鄰的幾個函數參數的類型相同,那麼我們可以省略前幾個參數的類型,只需要寫最後一個參數的類型。

更多程式相關知識,請造訪:程式設計影片! !

以上是golang形參有什麼要求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板