前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang 方法与函数的区别

Golang 方法与函数的区别

作者头像
地球流浪猫
发布2023-10-14 19:24:02
2450
发布2023-10-14 19:24:02
举报
文章被收录于专栏:流浪猫的golang流浪猫的golang
方法和函数的区别

方法和函数最主要的区别是有无接收者。函数是独立定义的,不属于任何类型。

方法有一个特殊的参数,称为接收者(receiver),它定义了方法所属的类型,不一定是结构体,任何自定义类型都可以为之定义方法

调用方式:方法通过类型变量或指针进行调用,类似于面向对象编程中的对象的方法调用。函数可以直接通过函数名进行调用。

包外可见性:方法的可见性由接收者的可见性决定。如果是私有的,那么其方法也是私有的。函数的可见性由函数名的可见性决定

重载:函数支持重载,可以同名但是参数列表不一样,方法不行。

方法
代码语言:javascript
复制
type MyInt int
func (m MyInt) Double() int {
    return int(m * 2)
}

func main() {
    num := MyInt(5)
    doubled := num.Double()
    fmt.Println(doubled) // 输出:10
}
函数
代码语言:javascript
复制
func Double(a int) int {
    return a * 2
}
func main() {
    result := Double(5)
    fmt.Println(result) // 输出:10
}
值接收者(value receiver)和指针接收者

方法可以定义两种类型的接收者:值接收者(value receiver)和指针接收者,使用值接收者和指针接收者的主要区别在于方法对接收者是否会对原始值进行修改

代码语言:javascript
复制
type Counter struct {
    count int
}

func (c Counter) Increment() {
    c.count++
}

func (c *Counter) Decrement() {
    c.count--
}

func main() {
    //值接收者
    counter1 := Counter{count: 0}
    counter1.Increment()
    fmt.Println(counter1.count) // 输出0 未改变原始值

    //指针接收者
    counter2 := &Counter{count: 0}
    counter2.Decrement()
    fmt.Println(counter2.count) // 输出-1 修改了原始值
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法和函数的区别
    • 方法
      • 函数
      • 值接收者(value receiver)和指针接收者
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档