登录
首页 >  Golang >  Go教程

Go 结构体对象可以调用接收指针类型的方法吗?

时间:2024-11-11 15:48:43 431浏览 收藏

本篇文章向大家介绍《Go 结构体对象可以调用接收指针类型的方法吗?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

Go 结构体对象可以调用接收指针类型的方法吗?

go 支持用结构体对象调用接收指针类型的方法的版本

原本认为接收类型为指针的方法只能接收指针调用,但事实并非如此。在 go 中,可以通过中间变量隐式转换,使用结构体对象调用接收指针类型的方法。

此功能在 go 的所有版本中都支持,意味着从 go 1.0 开始就可用。直接使用字面量调用这种方法是不被允许的,但通过中间变量则可以。

举个例子:

package main

import "fmt"

type printer interface {
    print()
}

type foo struct {
    i int
}

func (f *foo) print() {
    f.i = 2
    fmt.println(f)
}

func main() {
    f1 := foo{}
    var f2 any = f1
    if _, ok := f2.(printer); ok {
        fmt.println("ok")
    }
    f1.print()
    fmt.println(f1)
}

这段代码编译输出:

OK
{2}
{2}

这表明,虽然直接用字面量调用 foo{}.print() 会报错,但通过中间变量 f1 调用 f1.print() 却是允许的。

因此,go 从所有版本开始就支持用结构体对象调用接收指针类型的方法,但需要注意可寻址性(addressable)相关规则。

今天关于《Go 结构体对象可以调用接收指针类型的方法吗?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>