go 方法和函数的区别

news/2025/3/10 9:25:38/文章来源:https://www.cnblogs.com/maidongdong/p/18760013

 

图片中的内容总结了Go语言中方法和函数的区别,主要分为三个方面:

  1. 调用方式不同

    • 函数的调用方式:函数名(实参列表)
    • 方法的调用方式:变量.方法名(实参列表)
  2. 普通函数的接收者类型限制

    • 对于普通函数,如果接收者是值类型,则不能将指针类型的数据直接传递给它;反之亦然。
  3. 方法的接收者类型灵活性

    • 对于方法(如结构体的方法),如果接收者是值类型,可以直接使用指针类型的变量来调用该方法;反过来同样也可以。

示例说明

1. 调用方式不同

  • 函数示例

    func add(a int, b int) int {return a + b
    }result := add(1, 2)
    fmt.Println(result) // 输出: 3
    
  • 方法示例

    type Person struct {Name stringAge  int
    }func (p Person) Greet() string {return fmt.Sprintf("Hello, my name is %s and I am %d years old.", p.Name, p.Age)
    }person := Person{Name: "Alice", Age: 30}
    greeting := person.Greet()
    fmt.Println(greeting) // 输出: Hello, my name is Alice and I am 30 years old.
    

2. 普通函数的接收者类型限制

  • 普通函数示例
    func printValue(v int) {fmt.Println(v)
    }value := 42
    printValue(value) // 正确
    printValue(&value) // 错误,因为printValue接收的是值类型,而&value是引用类型
    

3. 方法的接收者类型灵活性

  • 方法示例
    type Point struct {X intY int
    }func (p Point) Distance() float64 {return math.Sqrt(float64(p.X*p.X + p.Y*p.Y))
    }point := Point{X: 3, Y: 4}
    fmt.Println(point.Distance()) // 直接使用值类型调用方法pointPtr := &Point{X: 3, Y: 4}
    fmt.Println((*pointPtr).Distance()) // 使用指针类型调用方法
    

通过这些示例,你可以更好地理解Go语言中方法和函数的区别以及它们的调用方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德里克昆什肯《量子战争》目录

机翻未校对是机翻的,而且没有经过校对,只能作为SFW编辑部的懒狗开工前的替代品 第一章 第二章 第三章 Chap 4 Chap 5~6 Chap 7~8 Chap 9~10 Chap 11~14 Chap 15~18 Chap 19~22 Chap 23~26 Chap 27~30 Chap 31~34 Chap 35~38 Chap 39~42 Chap 43~46 Chap 47~50 Chap 51~61本文…

ios调试(safari)

一、打开ios safari开发者模式在手机设备的“设置”中找到“safari浏览器”,点击进入 在safari设置中,找到“高级”选项,点击进入 在高级设置页面中,找到“网页(web)检查器”选项,打开开关 二、使用mac的safari开发者模式进行调试将ios设备通过usb连接到电脑上 打开mac中…

粒子群算法改进--自动退出迭代循环

前言当粒子已经找到最佳位置后,再增加迭代次数只会浪费计算时间,那么我们能否设计一个策略,能够自动退出迭代呢?循环跳出策略(1)初始化最大迭代次数、计数器以及最大计数值(例如分别取100, 0, 20) (2)定义“函数变化量容忍度”,一般取非常小的正数; (3)在迭代的过…

粒子群算法改进--线性递减惯性权重

惯性权重回顾 惯性权重w体现的是粒子继承先前的速度的能力 Shi,Y最先将惯性权重w引入到粒子群算法中,并且分析指出一个较大的惯性权值有利于全局搜索一个较小的权值则更利于局部搜索线性递减惯性权重在搜索初期,增强全局搜索能力可以更大可能遍历解空间,避免陷入局部最优解 &…

粒子群算法改进--压缩因子法

前言概述 粒子速度更新公式如下: vid = wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid) 在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒…

Mybatis-Plus异常处理

返回结果为2 ,我从Controller层中写的返回是一个floor实体,到Mapper层中返回的也是floor实体,但是Mapper返回是2条数据。 把controller层的返回值改为List。

关于sqlserver空间占用问题(.bak文件占用)

sqlserver跑项目的时候很可能涉及到较大的数据量(一开始占我c盘70GB!!!然后删了,然后就出事儿了,二次安装恶心至极,需要二次安装的话建议看我的上一篇文章)先打开ssms(SQL Server Management Studio)并连接,然后右击服务器找到属性 点击数据库设置,建议!!!直接改…

最近发现git bash运行很慢?

最近发现git bash打开运行后,键入命令,通常要五六秒,甚至十几秒才会响应。 打开上面这个后,比如输入git status要好久才会响应。 我的是双显卡导致的,解决办法:打开设备管理器,禁用其中一个显示适配器,速度就会快很多。 具体步骤截图: 1.搜索设备管理器 2.找到显示适…

sqlserver的二次安装!!

注意!!!建议在你看到这一条的时候,果断去淘宝找客服,sqlserver重新安装,十几块钱,不要自己搞,太煎熬了,折腾我3天!! 那么开始 首先得确保防火墙关闭!!例如火绒等安全卫士也要先退下去!! sqlserver这个东西,二次安装真的恶心,需要把所有东西删了重下,包括但不…