Go语言中普通函数与方法的区别分析
本文实例分析了Go语言中普通函数与方法的区别。分享给大家供大家参考。具体分析如下:
1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。
2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。
以下为简单示例:
packagestructTest //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候) //Date:2014-4-310:00:07 import( "fmt" ) funcStructTest06Base(){ structTest0601() structTest0602() } //1.普通函数 //接收值类型参数的函数 funcvalueIntTest(aint)int{ returna+10 } //接收指针类型参数的函数 funcpointerIntTest(a*int)int{ return*a+10 } funcstructTest0601(){ a:=2 fmt.Println("valueIntTest:",valueIntTest(a)) //函数的参数为值类型,则不能直接将指针作为参数传递 //fmt.Println("valueIntTest:",valueIntTest(&a)) //compileerror:cannotuse&a(type*int)astypeintinfunctionargument b:=5 fmt.Println("pointerIntTest:",pointerIntTest(&b)) //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递 //fmt.Println("pointerIntTest:",pointerIntTest(b)) //compileerror:cannotuseb(typeint)astype*intinfunctionargument } //2.方法 typePersonDstruct{ id int namestring } //接收者为值类型 func(pPersonD)valueShowName(){ fmt.Println(p.name) } //接收者为指针类型 func(p*PersonD)pointShowName(){ fmt.Println(p.name) } funcstructTest0602(){ //值类型调用方法 personValue:=PersonD{101,"WillSmith"} personValue.valueShowName() personValue.pointShowName() //指针类型调用方法 personPointer:=&PersonD{102,"PaulTony"} personPointer.valueShowName() personPointer.pointShowName() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
希望本文所述对大家的Go语言程序设计有所帮助。