區別:對於普通函數,接收者為值類型時,不能將指標類型的資料直接傳遞,反之亦然;對於方法,接收者為值類型時,可以直接用指標類型的變數調用方法,反過來同樣也可以。
本文操作環境:windows10系統、Go 1.11.2、thinkpad t480電腦。
相關推薦:《Go影片教學》
Go語言中普通函數與方法的差異
1、對於普通函數,接收者為值型別時,不能將指標型別的資料直接傳遞,反之亦然。
2、對於方法(如struct的方法),接收者為值型別時,可以直接用指標型別的變數呼叫方法,反過來同樣也可以。
以下為簡單範例:
package structTest //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候) //Date:2014-4-3 10:00:07 import ( "fmt" ) func StructTest06Base() { structTest0601() structTest0602() } //1.普通函数 //接收值类型参数的函数 func valueIntTest(a int) int { return a + 10 } //接收指针类型参数的函数 func pointerIntTest(a *int) int { return *a + 10 } func structTest0601() { a := 2 fmt.Println("valueIntTest:", valueIntTest(a)) //函数的参数为值类型,则不能直接将指针作为参数传递 //fmt.Println("valueIntTest:", valueIntTest(&a)) //compile error: cannot use &a (type *int) as type int in function argument b := 5 fmt.Println("pointerIntTest:", pointerIntTest(&b)) //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递 //fmt.Println("pointerIntTest:", pointerIntTest(b)) //compile error:cannot use b (type int) as type *int in function argument } //2.方法 type PersonD struct { id int name string } //接收者为值类型 func (p PersonD) valueShowName() { fmt.Println(p.name) } //接收者为指针类型 func (p *PersonD) pointShowName() { fmt.Println(p.name) } func structTest0602() { //值类型调用方法 personValue := PersonD{101, "Will Smith"} personValue.valueShowName() personValue.pointShowName() //指针类型调用方法 personPointer := &PersonD{102, "Paul Tony"} personPointer.valueShowName() personPointer.pointShowName() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
更多程式設計相關知識,請造訪:程式設計課程! !
以上是go語言中普通函數與方法的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!