go 遇到的坑

1作用域
在函数内使用:=给全局变量赋值时,如果同名,go会用一个新建变量覆盖,通过打印指针查看
2多协程
多个goroutine操作变量存在争抢,且传指针是不安全的
3并行,并发
并行同时进行,go自动给每个能用的物理处理器上绑定一个逻辑处理器,通过调度器
将全局队列中等待执行的goroutine移到逻辑处理器对应的本地队列中等待执行 
runtime.GOMAXPROCS(n) 其中n是整数,控制函数
runtime.Gosched() 控制让出时间片
4 return 
  不是原子操作分为两步赋值,return
5 defer
  LIFO后进先出,return 前一刻执行 
6 for
  遍历时变量是同一个指针,需要注意赋值时不要是最后一个值的考贝,
  可以利用索引获取原始值指向
7 struct 
  go中没有继承,有组合
8 select 
  case同时满足多个,伪随机选择执行 
9 map属于引用类型不支持并发,读写都存在竞争关系 
  sync.Mutex互斥锁 sync.RWMutex 读写锁 
10 unsafe
  字面意不安全,不受go的管理直接操作内存,尽量不用,比如性能要求时考虑使用
  Offsetof 结构体内的偏移量uintptr转换指针为了计算使用 Pointer
11 build
   传递参数-ldflags "-w",忽略debug的打印信息
   传递-gcflags "-N -l" 参数,这样可以忽略Go内部做的一些优化,便于GDB调试
12 strings.TrimLeft strings.TrimPrefix
// TrimLeft 将删除 s 头部连续的包含在 cutset 中的字符
func TrimLeft(s string, cutset string) string
// TrimPrefix 删除 s 头部的 prefix 字符串
// 如果 s 不是以 prefix 开头,则返回原始 s
func TrimPrefix(s, prefix string) string
13 modules
GO111MODULE 有三个值:off, on, auto(默认值)。
GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。
modules功能启用时依赖包的存放位置变更为$GOPATH/pkg,同一个package可以多个版本并存,多个项目可以共享缓存的module。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值