7个go的基本注意事项

  1. 传递参数的时候不传递interface而传递具体类型
  2. 不适用io.Writer & io.Reader, 而使用具体类型(和第一点有点重复了)
  3. 传递一个很大的interface,应该传递只需要用到的interface
  4. 什么时候用函数什么时候用方法:当需要状态或者修改状态的时候使用方法,如果只是逻辑,则使用函数。
  5. pointer receiver还是value receiver。指针receiver可以修改receiver,但是并发是不安全的,value receiver不能修改receiver,并发安全,但是传递value有资源的拷贝
  6. 把erros当成strings
func findServiceById(id uint) (s *service, err error) {                                                                                                                        
    h.dicMutex.Lock()                                                                                                                                                          
    defer h.dicMutex.Unlock()                                                                                                                                                  
    s, ok := h.dic[id]                                                                                                                                                         
    if !ok {
        err = erros.New("service is not find.")                                                                                                                                           
    }                                                                                                                                                                             
    return s, err 
} 

这样写了在外面就没法进行比较,所以应该这样写

ServiceNotFindError = errors.New("service is not find.") 
func findServiceById(id uint) (s *service, err error) {                                                                                                                        
    h.dicMutex.Lock()                                                                                                                                                          
    defer h.dicMutex.Unlock()                                                                                                                                                  
    s, ok := h.dic[id]                                                                                                                                                         
    if !ok {
        err = ServiceNotFindError                                                                                                                                        
    }                                                                                                                                                                             
    return s, err 
} 
  1. 并发安全还是不安全,设计API的时候要考虑是否需要并发安全的问题。安全需要消耗一些性能,但是用户用起来可能会更方便,因为用户不需要再去考虑并发安全;不安全则需要用户自己去考虑是否需要并发安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值