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

Dan*_*nyB 2 go

关于Go中的类型别名,我有点困惑.

我已经阅读了这个相关的SO问题 - 为什么我可以输入别名函数并在不进行转换的情况下使用它们 .

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

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

type Stack []string

func (s *Stack) Print() {
    for _, a := range s {
        fmt.Println(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我错误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)
    }
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*rod 7

你应该取消引用指针s

type Stack []string

func (s *Stack) Print() {
    for _, a := range *s {
        fmt.Println(a)
    }
}
Run Code Online (Sandbox Code Playgroud)