Go编程容易忽略的问题(持续更新)

  1. slice 切片的初始值是 nil,比如 var s []int s的值为nil,但任然可以直接使用,而不需要 make 等初始化,对其使用len结果为0,也可以直接append

  2. 使用 make 对切片初始化的时候,make(Type[], l, c) 使用3个参数时候,l 为 Len,c 为 Cap,Len其实是当前切片的一个偏移量,表示现在存储的有用数据有多少,也可以表示下次 append 的切片下标

  3. 反射中的 reflect.Type 的 Field相关指的是该类型下的导出字段,同样的 Method 相关的也是导出方法,这点容易忽略

  4. json.Unmarshal(data []byte, v interface{}) 函数,如果入参 v 为nil 的 interface{} 类型,则内部会为其分配一个map

  5. 在json序列化的时候,如果该字段的tag为 json:", omitempty" 则在该字段为相应0值的时候,去掉该key,也就是序列化的结果不包含该key

  6. 当自定义类型的底层为基础类型(int float32等)时,反射打印其类型 Kind() 方法的结果,任然是其底层的类型; 如果使用 interface 装载该类型,则断言时候,必须断言你定义的那个类型,而不能断言为底层类型,因为类型毕竟还是不一样,只是底层相同而已,可以看下如下代码

type A int
var b interface{
   } = A(1)
tb := reflect.TypeOf(b)
fmt.Println(tb.Kind(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值