Go語言中普通函數(shù)與方法的區(qū)別分析
更新時間:2015年02月08日 11:47:08 作者:books1958
這篇文章主要介紹了Go語言中普通函數(shù)與方法的區(qū)別,以實例形式對比分析了普通函數(shù)與方法使用時的區(qū)別與相關(guān)技巧,需要的朋友可以參考下
本文實例分析了Go語言中普通函數(shù)與方法的區(qū)別。分享給大家供大家參考。具體分析如下:
1.對于普通函數(shù),接收者為值類型時,不能將指針類型的數(shù)據(jù)直接傳遞,反之亦然。
2.對于方法(如struct的方法),接收者為值類型時,可以直接用指針類型的變量調(diào)用方法,反過來同樣也可以。
以下為簡單示例:
復(fù)制代碼 代碼如下:
package structTest
//普通函數(shù)與方法的區(qū)別(在接收者分別為值類型和指針類型的時候)
//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ù)傳遞
//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)用
}
//普通函數(shù)與方法的區(qū)別(在接收者分別為值類型和指針類型的時候)
//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ù)傳遞
//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)用
}
希望本文所述對大家的Go語言程序設(shè)計有所幫助。
相關(guān)文章
Go語言常見錯誤之濫用getters/setters誤區(qū)實例探究
在Go語言編程中,恰如其分地使用getters和setters是至關(guān)重要的,過度和不適當(dāng)?shù)厥褂盟鼈兛赡軐?dǎo)致代碼冗余、可讀性差和封裝不當(dāng),在本文中,我們將深入探討如何識別濫用getter和setter的情況,以及如何采取最佳實踐來避免這些常見的Go錯誤2024-01-01golang結(jié)合mysql設(shè)置最大連接數(shù)和最大空閑連接數(shù)
本文介紹golang?中連接MySQL時,如何設(shè)置最大連接數(shù)和最大空閑連接數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02