分享
  1. 首页
  2. 文章

Go语言中普通函数与方法的区别

books1958 · · 4109 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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()
	//与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用
}



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:books1958

查看原文:Go语言中普通函数与方法的区别

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4109 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏