程序开发 · 2024年7月13日

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

本篇文章向大家介绍《Go 结构体对象可以调用接收指针类型的方法吗?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。,
,
go 支持用结构体对象调用接收指针类型的方法的版本,原本认为接收类型为指针的方法只能接收指针调用,但事实并非如此。在 go 中,可以通过中间变量隐式转换,使用结构体对象调用接收指针类型的方法。,此功能在 go 的所有版本中都支持,意味着从 go 1.0 开始就可用。直接使用字面量调用这种方法是不被允许的,但通过中间变量则可以。,举个例子:,这段代码编译输出:,这表明,虽然直接用字面量调用 foo{}.print() 会报错,但通过中间变量 f1 调用 f1.print() 却是允许的。,因此,go 从所有版本开始就支持用结构体对象调用接收指针类型的方法,但需要注意可寻址性(addressable)相关规则。,今天关于《Go 结构体对象可以调用接收指针类型的方法吗?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注GOLANG公众号!,go 支持用结构体对象调用接收指针类型的方法的版本,本篇文章向大家介绍《Go 结构体对象可以调用接收指针类型的方法吗?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。,

当前位置: > > > > Go 结构体对象可以调用接收指针类型的方法吗?

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

2024-11-11 15:48:43
0浏览
收藏

本篇文章向大家介绍《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公众号!

Go 语言中变量的作用域是如何解析的?
华硕手提电脑:高性价比与卓越性能的完美结合