按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對參數(shù)不會有影響。
10余年的城中網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整城中建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“城中網(wǎng)站設(shè)計”,“城中網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
默認情況下,Go編程語言使用調(diào)用通過值的方法來傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來調(diào)用所述函數(shù)的參數(shù)??紤]函數(shù)swap()的定義如下。
代碼如下:
/* function definition to swap the values */
func swap(int x, int y) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
現(xiàn)在,讓我們通過使實際值作為在以下示例調(diào)用函數(shù)swap():
代碼如下:
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int = 200
fmt.Printf("Before swap, value of a : %d\n", a )
fmt.Printf("Before swap, value of b : %d\n", b )
/* calling a function to swap the values */
swap(a, b)
fmt.Printf("After swap, value of a : %d\n", a )
fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x, y int) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
這表明,參數(shù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。
通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實際參數(shù)。這意味著,對參數(shù)的更改會影響傳遞的參數(shù)。
要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應(yīng)的,需要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個整型變量的值指向它的參數(shù)。
代碼如下:
/* function definition to swap the values */
func swap(x *int, y *int) {
var temp int
temp = *x /* save the value at address x */
*x = *y /* put y into x */
*y = temp /* put temp into y */
}
現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過引用作為在下面的示例中傳遞數(shù)值:
代碼如下:
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int= 200
fmt.Printf("Before swap, value of a : %d\n", a )
fmt.Printf("Before swap, value of b : %d\n", b )
/* calling a function to swap the values.
* a indicates pointer to a ie. address of variable a and
* b indicates pointer to b ie. address of variable b.
*/
swap(a, b)
fmt.Printf("After swap, value of a : %d\n", a )
fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x *int, y *int) {
var temp int
temp = *x /* save the value at address x */
*x = *y /* put y into x */
*y = temp /* put temp into y */
}
讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100
這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。
按數(shù)據(jù)類別有以下幾種數(shù)據(jù)類型:
按存儲方式也有兩大類數(shù)據(jù)類型:
值類型:變量直接存儲值。值類型的數(shù)據(jù)存儲在棧內(nèi)存空間中,棧在函數(shù)調(diào)f返回后,內(nèi)存會被釋放。
引用類型:變量存儲的是一個地址,這個地址存儲最終的值。引用數(shù)據(jù)類型的數(shù)據(jù)存儲在堆內(nèi)存空間中,通過 GC 回收。
函數(shù)調(diào)用時申明的基礎(chǔ)類型均為值傳遞,如int,string,數(shù)組等,數(shù)據(jù)傳入函數(shù)后會重新copy一份,函數(shù)內(nèi)的修改不會影響外面的變量,外部變量的修改也不會影響函數(shù)類的變量。
func main () {
myvar := [ 4 ] string {" test0 ", " test1 ", " test3 ", " test4 "}
go Test (myvar)
for i := 1 ; i
Golang的interface,和別的語言是不同的。它不需要顯式的implements,只要某個struct實現(xiàn)了interface里的所有函數(shù),編譯器會自動認為它實現(xiàn)了這個interface。
SICP里詳細解釋了為什么同一個接口,需要根據(jù)不同的數(shù)據(jù)類型,有不同的實現(xiàn);以及如何做到這一點。在這里沒有OO的概念,先把OO放到一邊,從原理上看一下這是怎么做到的。
先把大概原理放在這里,然后再舉例子。為了實現(xiàn)多態(tài),需要維護一張全局的查找表,它的功能是根據(jù)類型名和方法名,返回對應(yīng)的函數(shù)入口。當我增加了一種類型,需要把新類型的名字、相應(yīng)的方法名和實際函數(shù)入口添加到表里。這基本上就是所謂的動態(tài)綁定了,類似于C++里的vtable。對于SICP中使用的lisp語言來說,這些工作需要手動完成。而對于java,則通過implements完成了這項工作。而golang則用了更加激進的方式,連implements都省了,編譯器自動發(fā)現(xiàn)自動綁定。
分享文章:go語言main傳參 golang傳參
鏈接分享:http://aaarwkj.com/article12/dochodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站營銷、用戶體驗、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)