Go:扩展未命名的类型,例如[] string

时间:2014-10-14 07:54:42

标签: go

我对Go中的类型别名有点困惑。

我已经阅读了这个相关的SO问题 - Why can I type alias functions and use them without casting?

据我所知,如果底层结构相同,未命名和命名的变量可以相互分配。

我想弄清楚的是,我可以通过命名它们来扩展未命名的类型 - 类似这样:

type Stack []string

func (s *Stack) Print() {
    for _, a := range s {
        fmt.Println(a)
    }
}

这给了我错误cannot range over s (type *Stack)
试过把它投到[]string,不要去。

我知道下面的代码有效 - 这是我应该这样做的吗?如果是这样,我很想知道为什么以上不起作用,以及type Name []string等声明的用途。

type Stack struct {
    data []string
}

func (s *Stack) Print() {
    for _, a := range s.data {
        fmt.Println(a)
    }
}

1 个答案:

答案 0 :(得分:6)

你应该取消引用指针s

type Stack []string

func (s *Stack) Print() {
    for _, a := range *s {
        fmt.Println(a)
    }
}