在c++里,自己定义一个结构体,然后将这个结构体实例化后通过参数传递。例如:
struct Elem{...};
Elem e;
std::stack<Elem> s;
s.push(e);
查看STL中的具体实现,push方法传递的是引用,内部再调用deque的push_back()方法,同样传递的是引用,最终通过容器的allocator来为已特化的类型分配空间。
也就是整个过程可以只传递引用(或指针)这样开销比较小,到最后可以为这个类型开辟空间,进行值拷贝。
但在golang里面,我自己实现了一个stack(模仿泛型,采用了inerface{}来接收外部数据结构),例如:
type Stack struct {
top *Element
size int
}
type Element struct {
value interface{}
next *Element
}
func (s *Stack) push(value interface{}){
...
}
s := new(Stack)
s.push(&e)
将e的指针(或引用)传递到stack当中,stack的push方法内部以interface{}接收到e后,可不可以拿到e里面的东西?不只是一个指针?
就像c++中的那样,可以拷贝数据类型中的值并分配内存空间。
我在push方法里试着写:xxx = *value 会得到invalid indirect of value (type interface {})错误信息,也就是拿不到里面的值?