代码之家  ›  专栏  ›  技术社区  ›  Unknown

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

  •  0
  • Unknown  · 技术社区  · 2 年前

    如何访问结构字段 名称 从结构方法字段 打印名 例子:

    type Data struct {
        Name      string
        PrintName func()
    }
    
    func main() {
        data := Data{
            Name: "Name",
            PrintName: func() {
                fmt.Println(Name)
            },
        }
    
        data.PrintName()
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   icza    2 年前

    指定给的函数值 Data.PrintName 与封闭结构没有任何连接,因此在一般情况下,它无法访问 Name 领域

    如果要访问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 .