go语言中普通函数与方法有什么区别

区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然;对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。

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

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

原创文章,作者:JEQYA,如若转载,请注明出处:https://www.beidanyezhu.com/a/26854.html

(0)
JEQYA的头像JEQYA
上一篇 2025-01-05
下一篇 2025-01-06

相关推荐

  • go语言可以用哪些框架

    go语言使用的框架有:1、Beego框架;2、Buffalo框架;3、Echo框架;4、Gin框架;5、Iris框架;6、Revel框架。 6款好用的go语言web框架: Beeg…

  • go语言怎么引入包

    go语言引入包的方法:可以直接使用【import "包名"】来引入一个包。如果需要同时引入多个包,可以使用【import {"包名" &qu…

    2025-01-07
  • go语言有什么开发工具

    go语言开发工具有:1、GoLand;2、LiteIDE;3、Eclipse。LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境。 开发工具介绍: 1、GoLand Go…

    2025-01-07
  • yum如何安装go语言

    yum安装go语言的方法:首先执行【yum -y install golang】命令安装go;然后编辑profile文件,配置环境变量;最后执行【source /etc/profi…

  • vscode如何配置go语言开发环境

    Golang 环境配置 1) 首先下载适合你系统的安装包 2)下载完成安装到指定目录即可。我这里是(D:\Go)。 3)配置Glang环境变量 进入我的电脑->高级设置-&g…

    2025-01-07
  • go语言defer怎么用

    go语言defer的用法:1、defer语句在函数返回之前或函数中的return语句之后执行;2、多个defer语句的执行顺序是逆序执行;3、在panic语句后的defer语句不执…

  • windows下如何搭建go语言开发环境

    windows下搭建go语言开发环境的方法:1、在官网下载go语言开发包;2、安装go语言开发包;3、设置GOPATH环境变量;4、测试go开发包是否安装成功。 具体步骤如下: 一…

    2025-01-07
  • go语言的7大优势是什么

    go语言的优势有:1、学习曲线容易;2、开发效率和运行效率高;3、自由高效;4、拥有强大的标准库;5、部署方便;6、高度支持并发性;7、稳定性高。 go语言的优势: 1、学习曲线容…

  • go语言指的是什么

    go语言是一种静态强类型、编译型语言,它的语法与C语言相近。go语言规定每行程序结束后不需要撰写分号,大括号不能够换行放置,if判断式和for循环不需要以小括号包裹。 详细介绍: …

  • go语言适合于什么领域

    go语言适用的领域有:1、服务器编程;2、分布式系统;3、网络编程;4、内存数据库;5、云平台;6、游戏服务端的开发。go语言是一种静态强类型、编译型语言。 Go(又称 Golan…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部