登录
首页 >  Golang >  Go问答

从结构体方法字段访问结构体字段

来源:stackoverflow

时间:2024-04-09 12:21:32 499浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《从结构体方法字段访问结构体字段》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

如何从结构方法字段 printname 访问结构字段 name 示例:

type Data struct {
    Name      string
    PrintName func()
}

func main() {
    data := Data{
        Name: "Name",
        PrintName: func() {
            fmt.Println(Name)
        },
    }

    data.PrintName()
}

正确答案


分配给 data.printname 的函数值与封闭结构没有任何联系,因此在一般情况下它无法访问 name 字段。

如果要访问名称字段,则必须显式传递它,或者使用可以访问 data 结构的闭包,如下所示:

data := data{
    name: "name",
}

data.printname = func() {
    fmt.println(data.name)
}

data.printname()

这将输出(在 Go Playground 上尝试):

name

在此示例中,我们分配给 data.printname 字段的函数值是一个闭包,因为它使用封闭块中的变量。

您还可以选择将 data 值显式传递给函数值,但必须修改其签名:

type data struct {
    name      string
    printname func(d data)
}

func main() {
    data := data{
        name: "name",
    }

    data.printname = func(d data) {
        fmt.println(d.name)
    }

    data.printname(data)
}

这输出是相同的,请在 Go Playground 上尝试这个。

您希望 printname 作为结构字段而不仅仅是 data 方法有什么特殊原因吗?

type Data struct {
    Name string
}
func (data *Data) PrintName(){
    fmt.Println(data.Name)
}

好了,本文到此结束,带大家了解了《从结构体方法字段访问结构体字段》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>