golang通过reflect创建slice及json.Marshal后为null的问题

在gin框架以及json.Marshal在编码一个slice时,有以下两种情况

list1:=new([]User)
list2:=make([]User,0)

res1,_:=json.Marshal(list1)
res2,_:=json.Marshal(list2)

fmt.Println(string(res1),string(res2)) //output: null []

可见,通过new创建的slice会输出null,而make会返回空数组。

同样,在通过反射创建slice时,也有两种方法

方法一:相当于new

func CreateEmptySlice(data interface{}) interface{} {
	return reflect.Zero(reflect.SliceOf(reflect.TypeOf(data))).Interface()
}

方法二:相对于make

func CreateEmptySlice(data interface{}) interface{} {
	return reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(data)),0,10).Interface()
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据