Go语言中普通函数与方法的区别
2014-04-03 10:35
441 查看
1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。
2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。
以下为简单示例:
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语言中普通函数与方法的区别分析
- 第01天OC语言(13):方法和函数的区别
- 黑马程序员-OC语言-函数和对象方法的区别(听课笔记)
- go语言使用go-sciter创建桌面应用(三) 事件处理,函数与方法定义,go与tiscript之间相互调用
- Go语言中结构体方法副本传参与指针传参的区别介绍
- Go语言之函数方法
- go语言[7] 函数,方法和接口
- Go语言中函数的参数传递与调用的基本方法
- ios 中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候
- GO语言结构体方法跟结构体指针方法的区别
- C语言中static 函数除了不能再外部被调用外和普通函数还有什么区别呢?
- 函数和方法的区别
- 举例讲解Go语言中函数的闭包使用
- Go语言中的函数
- 内联函数与普通函数、成员函数与静态函数的区别(知识整理)
- go语言函数参数与返回值示例,数组的简单应用
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- go语言解析JSON的方法
- Go语言用defer定义函数比较奇怪的地方