【问题标题】:Accessing values from embedded slice in struct从结构中的嵌入切片访问值
【发布时间】:2016-08-21 06:59:27
【问题描述】:

我正在尝试访问结构中嵌入切片的值。如果可能的话,我如何通过索引来做到这一点,并且不显式调用私有嵌入对象(从包外部访问时甚至不是一个选项)?

package main

import (
    "fmt"
)

type A struct {
    aSlice
}

type aSlice []string

func main() {
    a := A{[]string{"hello", "world"}}
    fmt.Println(a.aSlice[0]) // works, but can't be accessed outside package
    fmt.Println(a[0]) // doesn't work, but looking for this something like this
}

【问题讨论】:

标签: go slice


【解决方案1】:

我想我在这篇文章中找到了答案:golang anonymous field of type map

当您嵌入时,只有字段和方法可以被“提升”。为了 其他所有内容它们都只是另一个字段。

在这种情况下,结构相当于:

type A struct {
    aSlice aSlice
}

为什么它的值只能通过A.aSlice 索引访问是有道理的。

【讨论】:

    【解决方案2】:

    如果将切片声明为导出类型,则可以访问嵌入的切片。但是你仍然不能做索引。

    package a
    type Slice []string
    type A struct {
       Slice
    }
    
    package main
    import "a"
    func main() {
      _a := a.AB{[]string{"hello", "world"}}
      fmt.Println(_a.Slice[0])
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2022-10-23
      • 2014-03-25
      • 1970-01-01
      • 2017-07-13
      • 2017-12-07
      • 1970-01-01
      • 2019-05-01
      • 2017-01-16
      相关资源
      最近更新 更多