一文带你彻底搞懂 Golang 中的方法(Methods)

 更新时间:2023年07月16日 09:00:36   作者:路多辛  
Golang 支持一些类似面向对象编程的特性,方法就其中之一,本文将详细介绍 Golang 中方法相关的知识,感兴趣的小伙伴跟着小编一起来学习吧

方法(Methods)定义

在 Golang 中,方法(methods)是与特定类型相关联的函数。类似面向对象语言中的成员函数,方法可以访问该类型的数据和其他方法。

方法定义由关键字 func 开始,后面跟上接收者、方法名、参数列表和返回值列表。方法定义的基本语法如下:

func (r ReceiverType) methodName(parameterList) (returnParameterList) {
  // 方法体
}

具体含义如下:

  • r:是接收者类型(receiver)的简写,一般使用接收者首字母的小写格式(如果方法体中使用不到可以省略)。
  • ReceiverType: 表示接收者类型,可以是结构体、自定义函数类型等。
  • methodName: 表示方法名,根据惯例,方法名的首字母通常使用大写字母。
  • parameterList: 表示方法的参数列表,类似于函数的参数列表。
  • returnParameterList: 表示方法的返回值,可以有多个返回值。
  • 方法体:包含实现方法功能的代码块。

以下是一个简单的示例代码:

package main
import "fmt"
type Person struct {
	Name string
	Age  int
}
// SayHello 在 Person 类型上定义一个方法 SayHello
func (p Person) SayHello() {
	fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.Name, p.Age)
}
func main() {
	// 创建一个 Person 类型的实例
	var person Person
	person.Name = "路多辛"
	person.Age = 18
	// 调用 SayHello 方法
	person.SayHello()
}

首先定义了 Person 结构体,并为其定义了 SayHello 方法。然后在 main 函数中首先创建了一个 Person 类型的实例,然后调用了它的 SayHello 方法。

接收者类型

方法的接收者可以是值接收者(value receiver),也可以是指针接收者(pointer receiver)。

当使用值接收者调用方法时,Golang 会通过值传递的方式将接收者传递给方法,并对方法中的接收者进行拷贝,值接收者适用于对接收者的值进行操作的场景。

当使用指针接收者调用方法时,Golang 会通过指针传递的方式将接收者传递给方法,方法可以修改接收者的数据,这种方法适用于需要修改接收者状态的场景。

来看一个简单的示例:

package main  
import "fmt"  
type Rectangle struct {  
    width, height float64  
}  
// 使用值接收者调用方法,将返回矩形的面积  
func (r Rectangle) Area() float64 {  
    return r.width * r.height  
}  
// 使用指针接收者调用方法,将修改矩形的宽度  
func (r *Rectangle) SetWidth(w float64) {  
    r.width = w  
}  
func main() {  
    // 创建一个 Rectangle 类型的实例  
    var rect Rectangle  
    rect.width = 10.0  
    rect.height = 5.0  
    // 使用值接收者调用 Area 方法,并打印结果  
    fmt.Println("Area:", rect.Area()) // 输出:Area: 50.000000  
    // 使用指针接收者调用 SetWidth 方法,并打印结果  
    rect.SetWidth(15.0)  
    fmt.Println("Width:", rect.width) // 输出:Width: 15.000000  
}

方法的其他特性

方法有很多和函数类似的特性,如下:

  • 可以接受零个或多个输入参数
  • 支持可变输入参数,可变参数意味着方法可以接受不定数量参数
  • 可以返回零个或多个参数
  • 不支持重载
  • 接收者类型相同的情况下,方法名不能重复
  • 不支持默认参数

小结

本文详细讲解了 Golang 中方法相关的知识,方法是 Golang 中实现类似面向对象编程特性的一种机制,通过使用方法,可以提高代码的可重用性和可维护性。

到此这篇关于一文带你彻底搞懂 Golang 中的方法(Methods)的文章就介绍到这了,更多相关Golang 方法(Methods)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你了解如何正确理解和使用Golang中nil

    一文带你了解如何正确理解和使用Golang中nil

    在 Golang 中,nil 是一个预定义的标识符,在不同的上下文环境中有不同的含义,但通常表示“无”、“空”或“零值”,本文主要来带大家了解下nil的正确使用,需要的可以参考下
    2023-12-12
  • 一文带你探索Go语言中crypto/md5标准库的强大功能

    一文带你探索Go语言中crypto/md5标准库的强大功能

    我们将从MD5算法的基础知识入手,逐步深入到如何在Go中有效使用crypto/md5标准库,包括基本的使用方法、实际应用案例分析,以及性能和安全性的考量,需要的可以参考下
    2024-02-02
  • Go语言学习教程之反射的示例详解

    Go语言学习教程之反射的示例详解

    这篇文章主要通过记录对reflect包的简单使用,来对反射有一定的了解。文中的示例代码讲解详细,对我们学习Go语言有一定帮助,需要的可以参考一下
    2022-09-09
  • 掌握Golang中的select语句实现并发编程

    掌握Golang中的select语句实现并发编程

    Golang中的select语句用于在多个通道间选择可读或可写的操作,并阻塞等待其中一个通道进行操作。可以用于实现超时控制、取消和中断操作等。同时,select语句支持default分支,用于在没有任何通道可操作时执行默认操作
    2023-04-04
  • Go Gin 处理跨域问题解决

    Go Gin 处理跨域问题解决

    在前后端分离的项目中,经常会遇到跨域问题,本文主要介绍了Go Gin 处理跨域问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • 一文带你掌握Go语言后端的锁机制

    一文带你掌握Go语言后端的锁机制

    本文详细介绍了Go后端开发中常用的14种锁机制及其应用场景,涵盖了sync.Mutex、sync.RWMutex、sync.WaitGroup、sync.Once、sync.Cond、sync.Pool、sync.Map、sync/atomic、Channel、context等原语以及不同原语的性能对比和适用场景
    2026-05-05
  • golang网络socket粘包问题的解决方法

    golang网络socket粘包问题的解决方法

    这篇文章主要介绍了golang网络socket粘包问题的解决方法,简单讲述了socket粘包的定义并结合实例形式分析了Go语言解决粘包问题的方法,需要的朋友可以参考下
    2016-07-07
  • go开发alertmanger实现钉钉报警

    go开发alertmanger实现钉钉报警

    本文主要介绍了go开发alertmanger实现钉钉报警,通过自己的url实现alertmanager的钉钉报警,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Golang中下划线(_)的不错用法分享

    Golang中下划线(_)的不错用法分享

    golang中的下划线表示忽略变量的意思,也没有产生新的变量,但是后面的表达式依然会被执行,本文为大家整理了golang中下划线的一些不错的用法,需要的可以参考下
    2023-05-05
  • Go1.18 新特性之多模块Multi-Module工作区模式

    Go1.18 新特性之多模块Multi-Module工作区模式

    这篇文章主要介绍了Go1.18 新特性之多模块Multi-Module工作区模式,在 Go 1.18之前,建议使用依赖模块中的 replace 指令来处理这个问题,从 Go 1.18开始引入了一种同时处理多个模块的新方法,通过案例给大家详细介绍,感兴趣的朋友一起看看吧
    2022-04-04

最新评论