in codec.go [435:466]
func SetSlice(dest reflect.Value, objects interface{}) error {
if objects == nil {
return nil
}
dest = UnpackPtrValue(dest)
destTyp := UnpackPtrType(dest.Type())
elemKind := destTyp.Elem().Kind()
if elemKind == reflect.Uint8 {
// for binary
dest.Set(EnsureRawValue(objects))
return nil
}
if ref, ok := objects.(*_refHolder); ok {
return unpackRefHolder(dest, destTyp, ref)
}
v := EnsurePackValue(objects)
if h, ok := v.Interface().(*_refHolder); ok {
// if the object is a ref one, just add the destination list to wait delay initialization
h.add(dest)
return nil
}
v, err := ConvertSliceValueType(destTyp, v)
if err != nil {
return err
}
SetValue(dest, v)
return nil
}