shenyi
管理员
管理员
  • UID1
  • 粉丝45
  • 关注0
  • 发帖数842
阅读:2798回复:0

Golang周报第三期:版本升级、共享内存、狮子和老虎谁厉害

楼主#
更多 发布于:2020-09-09 15:10


     第一期连接: Golang周报第一期:gorm2、微服务优势、云原生、好程序员
     第二期连接: Golang周报第二期:端口扫描、json瓶颈、slice修改、微服务课程升级
  
     今日是第三期
 一、关于Go版本
    截止到目前写稿。 go 1.15系目前版本是到1.15.1 ,之前1.15.0 有人提交了个不大不小的BUG。 1.14版本也进入1.14.8 。  假设你现在用的是1.14.x早期版本,那么个人觉得稳定性角度考虑可以升级到1.14.8 。激进点直接1.15.1。
   我个人喜欢在迭代几个修订版本后 开始逐步升级。 譬如 1.15.1,将来到了1.15.4 啊神马的 就考虑升级先有项目了。
   版本不要走极端。譬如有的同学公司版本还是1.11 或更早,这不别扭吗?  而有的很激进,一出新的立刻把项目给升级了,亲,家里有矿啊
   1.15 版本Release Notes 看这里 https://docs.studygolang.com/doc/go1.15


二、关于Go共享内存
   众所周知,go 里面的建议(口号)是:不要通过共享内存来通信,而应该通过通信来共享内存。  
 那么我们就影响操作共享内存有办法吗?
   当然有 ,在swoole就有共享内存的操作。
   基本思路(供有兴趣的同学也研究)
   首先,linux里提供了操作共享内存的方法,经典的三大函数 shmget(创建或获取共享内存), shmat(将共享内存链接attach到进程空间,使之可用), shmdt (和上一个函数反过来)
    可以直接用cgo来调用 (Go和C的交互很丝滑),也可以用syscall来完成。 如果真要操作,个人推荐第一种

三、 一个面试题:Go里面字符串累加有哪些方法
   各个语言都会碰到 字符串累加的问题,Go也不例外
   几个方法 strings.Builder、bytes.Buffer、还有就是直接用+ 号加了。  比较推荐的是前两个性能比较高,另外,如果业务操作也就"a"+"b" ,那直接+号加 也无妨,没啥性能差别。不要榆木脑袋,觉得必须要用什么 高逼格手段。有毒的东西也是要看剂量的
   这里介绍个 append的方法的字符串累加 (当然,仅仅是骚操作,性能还是不如Builder和buffer)
      str:=[]byte("abc")
 for n := 0; n < 100; n++ {
 str = append(str,[]byte(strconv.Itoa(n))...)
 }
 fmt.Println(string(str))
   大家可以复制下代码 试一试
  
四、关于Go做限流
   之前有个课程 介绍过go自带的 time/rate包,使用的令牌桶算法。 纯学习角度是没有问题的。
   不过现在已经是2020年了。如果是为了快速完成项目。那么建议使用一些成熟的库,譬如阿里的sentinel (java和go版本都有)


五、上一期周报下来。有网友问 ,java、Go和rust到底选哪个好
    说实话,我个人很讨厌这个问题。  有一个经典 韭菜暴击问题: 老虎和狮子谁厉害。 而且网上争论不休,甚至有人专门把狮子和老虎各项身体指标进行对比,然后得出结论。(不想说哪个 )
    殊不知,不同品类的老虎和狮子是不一样的。还有地域差异、先天身体素质差异、年龄差异、生存环境的客观因素。
   不考虑这些因素,直接想知道结论,有啥意义呢~~~~  
   因此 再问那个语言好,小心我"死"你面前、


六、关于我们网站的学习路线。
    目前的路线在这 http://b.jtthink.com/read.php?tid=564。 一年一个主题,但是长期坚持Go主线这条路是不会变的。今年主要偏向初中级的web 开发,明年开始逐步往云开发(k8s)、云原生开发过渡,并长期坚持 符合趋势的课程体系建设。
  
七、关于微软的  “可移植的,事件驱动的,无服务器运行时,用于构建跨云和边缘的分布式应用程序 “
    亮点是:dapr是微软用golang写的。
    地址在这:https://github.com/dapr/dapr  。保持关注,空了弄个演示视频给大家把玩。目前还没有正式版发出,仅限学习使用。
    
会讲故事的程序员
游客

返回顶部