返回介绍

07.1 类型方法

发布于 2024-08-14 12:50:32 字数 6181 浏览 0 评论 0 收藏 0

Go的类型方法是带有特殊参数的函数。在一个声明为普通函数的方法函数名前面,增加一个特定参数,该特定参数将函数与该参数的类型进行关联,该特定参数被称为方法的接收器

下面的Go代码是在https://golang.org/src/os/file_plan9.go中的 Close() 函数的实现:

> func (f *File) Close() error {
>     if err := f.checkValid("close"); err != nil {
>         return err
>     }
>     return f.file.close()
> }

Close() 函数就是类型方法,因为函数名称前面和 func 关键字后面有(f *File)参数。 f```参数被称为**方法的接收器**;在面向对象编程术语中,这个过程可以描述为向**对象**发送消息。在Go语言中,**方法的接收器**是使用常规变量名定义的,通常使用单个字母,而不需要使用专用关键字,如 this``或self` 。

接下来我们使用 methods.go 文件的Go代码来呈现一个完整的示例,包含以下四部分。

methods.go 的第一部分是以下Go代码:

> package main
> 
> import (
>     "fmt"
> )
> 
> type twoInts struct {
>     X int64
>     Y int64
> }

在前面的代码中,定义了结构体 twoInts ,该结构体包含两个 int64 类型的字段。

methods.go 的第二个代码段如下:

> func regularFunction(a, b twoInts) twoInts {
>     temp := twoInts{X: a.X + b.X, Y: a.Y + b.Y}
>     return temp
> }

在本部分中,定义了一个名为 regularFunction() 的函数,该函数接收两个 twoInts 类型的参数,并返回一个 twoInts 类型的值。

methods.go 程序的第三部分包含以下Go代码:

> func (a twoInts) method(b twoInts) twoInts {
>     temp := twoInts{X: a.X + b.X, Y: a.Y + b.Y}
>     return temp
> }

method() 函数等效于 methods.go 前面部分定义的 regularFunction() 函数。 method() 函数是一个类型方法。接下来将介绍类型方法的调用与普通函数调用的差别。

这里真正有趣的是,类型方法 method() 与普通函数 regularFunction() 的实现完全相同。

methods.go 的最后一个代码段如下:

> func main() {
>     i := twoInts{X: 1, Y: 2}
>     j := twoInts{X: -5, Y: -2}
>     fmt.Println(regularFunction(i, j))
>     fmt.Println(i.method(j))
> }

如您所见,您调用类型方法i.method(j) )的方式是与普通函数( regularFunction(i,j) )的调用方式不同。

执行 methods.go 的输出如下:

> $ go run methods.go
> {-4 0}
> {-4 0}

值得注意的是,类型方法也与接口相关,下一节中将对接口进行讲解,稍后也将看到更多类型方法的使用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文