我想建立一个后进先出的堆栈。我已经创建了一个Stack[T any]
接口和一个dynamicStack[T any]
结构。dynamicStack具有数据[]T
字段和索引int
字段。当创建dynamicStack
时,我希望数据初始化为空,大小固定为1,类型为T
。出现语句:“无法使用[0]T{}([0]T类型的值)作为赋值中的[]T值”。
type Stack[T any] interface {
IsEmpty() bool
SeeTop() T
AddToStack(T)
Unstack() T
}
type dynamicStack[T any] struct {
data []T
index int
}
func CreateDynamicStack[T any]() Stack[T] {
s := new(dynamicStack[T])
s.data = [0]T{} // Problem
s.index = 0
return s
}
我试过使用const而不是“0”,不同的大小,甚至将数组初始化为非空,但没有任何效果。
我不想使用append()
方法,我需要一个固定大小的数组,因为我的计划是在数组满或半空时调整数组大小。
有什么想法吗?
1条答案
按热度按时间yzuktlbb1#
s.data
是一个slice,你应该将它初始化为一个slice:实际上,go处理nil切片的方式与处理空切片的方式非常相似,因此您甚至不需要在结构中初始化
s.data
。有关说明,请参见下面的示例。在go中,切片类型
[]T
和数组类型[n]T
之间存在差异。有关切片和数组行为的详细解释,请参阅Andrew Gerrand的这篇文章:
Go Slices: usage and internals
Playground:https://go.dev/play/p/kB1g2Iq-n6u