本文實例分析了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語言程序設計有所幫助。
您可能感興趣的文章:- Go語言中append函數用法分析
- GO語言延遲函數defer用法分析
- Go語言的os包中常用函數初步歸納
- Go語言常見哈希函數的使用
- 舉例講解Go語言中函數的閉包使用
- Go語言里的new函數用法分析
- Golang的os標準庫中常用函數的整理介紹
- 深入解析golang編程中函數的用法
- Golang學習筆記(五):函數
- Golang教程之不可重入函數的實現方法