在下面的代码中,两个选项似乎都分配相同的资源。
如果在这个具体的例子中没有区别,那么一个说明区别的示例将是很好的。此外,在尝试为接口分配时,在这种具体情况下,哪种选项更可取。
编辑:reflect.DeepEqual(s0, s1) 返回false。我认为rv.Elem().Type()在处理零值时存在问题,因此可能更喜欢rv.Type().Elem()。 操场
func Allocate(v interface{}) error {
rv := reflect.ValueOf(v)
if rv.IsNil() {
return errors.New("Value of v is nil")
}
s0 := reflect.New(rv.Type().Elem())
s1 := reflect.New(rv.Elem().Type())
return errors.New(fmt.Sprintf("What's the diff? %v %v", s0, s1))
}
如果在这个具体的例子中没有区别,那么一个说明区别的示例将是很好的。此外,在尝试为接口分配时,在这种具体情况下,哪种选项更可取。
编辑:reflect.DeepEqual(s0, s1) 返回false。我认为rv.Elem().Type()在处理零值时存在问题,因此可能更喜欢rv.Type().Elem()。 操场
v
是指针类型,则没有。 - Volker