-
slice 切片的初始值是 nil,比如
var s []int
s的值为nil,但任然可以直接使用,而不需要make
等初始化,对其使用len结果为0,也可以直接append
-
使用 make 对切片初始化的时候,make(Type[], l, c) 使用3个参数时候,l 为 Len,c 为 Cap,Len其实是当前切片的一个偏移量,表示现在存储的有用数据有多少,也可以表示下次 append 的切片下标
-
反射中的 reflect.Type 的 Field相关指的是该类型下的导出字段,同样的 Method 相关的也是导出方法,这点容易忽略
-
json.Unmarshal(data []byte, v interface{})
函数,如果入参 v 为nil 的 interface{} 类型,则内部会为其分配一个map -
在json序列化的时候,如果该字段的tag为
json:", omitempty"
则在该字段为相应0值的时候,去掉该key,也就是序列化的结果不包含该key -
当自定义类型的底层为基础类型(int float32等)时,反射打印其类型 Kind() 方法的结果,任然是其底层的类型; 如果使用 interface 装载该类型,则断言时候,必须断言你定义的那个类型,而不能断言为底层类型,因为类型毕竟还是不一样,只是底层相同而已,可以看下如下代码
type A int
var b interface{
} = A(1)
tb := reflect.TypeOf(b)
fmt.Println(tb.Kind(