本文實例分析了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語言程序設計有所幫助。