我对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)
}
}
答案 0 :(得分:6)
你应该取消引用指针s
type Stack []string
func (s *Stack) Print() {
for _, a := range *s {
fmt.Println(a)
}
}