Go语言中普通函数与方法的区别分析
2015-02-08 11:47
811 查看
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语言中普通函数与方法的区别
- Go语言中append函数用法分析
- go语言使用scp的方法实例分析
- Go语言中常量定义方法实例分析
- Go语言中结构体方法副本传参与指针传参的区别介绍
- go语言[7] 函数,方法和接口
- Go语言中的方法定义用法分析
- go语言使用go-sciter创建桌面应用(三) 事件处理,函数与方法定义,go与tiscript之间相互调用
- Go语言中函数的参数传递与调用的基本方法
- go语言日志记录库简单使用方法实例分析
- GO语言结构体方法跟结构体指针方法的区别
- Go语言之函数方法
- Java语言层面和JVM层面方法特征签名的区别 及 实例分析
- 黑马程序员-OC语言-函数和对象方法的区别(听课笔记)
- Go语言里的new函数用法分析
- ios 中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候
- 第01天OC语言(13):方法和函数的区别
- C语言中static 函数除了不能再外部被调用外和普通函数还有什么区别呢?
- 分析函数调用关系图(call graph)的几种方法