本文實(shí)例分析了Go語(yǔ)言中普通函數(shù)與方法的區(qū)別。分享給大家供大家參考。具體分析如下:
1.對(duì)于普通函數(shù),接收者為值類型時(shí),不能將指針類型的數(shù)據(jù)直接傳遞,反之亦然。
2.對(duì)于方法(如struct的方法),接收者為值類型時(shí),可以直接用指針類型的變量調(diào)用方法,反過(guò)來(lái)同樣也可以。
以下為簡(jiǎn)單示例:
復(fù)制代碼 代碼如下:
package structTest
//普通函數(shù)與方法的區(qū)別(在接收者分別為值類型和指針類型的時(shí)候)
//Date:2014-4-3 10:00:07
import (
"fmt"
)
func StructTest06Base() {
structTest0601()
structTest0602()
}
//1.普通函數(shù)
//接收值類型參數(shù)的函數(shù)
func valueIntTest(a int) int {
return a + 10
}
//接收指針類型參數(shù)的函數(shù)
func pointerIntTest(a *int) int {
return *a + 10
}
func structTest0601() {
a := 2
fmt.Println("valueIntTest:", valueIntTest(a))
//函數(shù)的參數(shù)為值類型,則不能直接將指針作為參數(shù)傳遞
//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))
//同樣,當(dāng)函數(shù)的參數(shù)為指針類型時(shí),也不能直接將值類型作為參數(shù)傳遞
//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() {
//值類型調(diào)用方法
personValue := PersonD{101, "Will Smith"}
personValue.valueShowName()
personValue.pointShowName()
//指針類型調(diào)用方法
personPointer := PersonD{102, "Paul Tony"}
personPointer.valueShowName()
personPointer.pointShowName()
//與普通函數(shù)不同,接收者為指針類型和值類型的方法,指針類型和值類型的變量均可相互調(diào)用
}
希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- Go語(yǔ)言中append函數(shù)用法分析
- GO語(yǔ)言延遲函數(shù)defer用法分析
- Go語(yǔ)言的os包中常用函數(shù)初步歸納
- Go語(yǔ)言常見(jiàn)哈希函數(shù)的使用
- 舉例講解Go語(yǔ)言中函數(shù)的閉包使用
- Go語(yǔ)言里的new函數(shù)用法分析
- Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹
- 深入解析golang編程中函數(shù)的用法
- Golang學(xué)習(xí)筆記(五):函數(shù)
- Golang教程之不可重入函數(shù)的實(shí)現(xiàn)方法