阅读:3414回复:0
Golang周报第三期:版本升级、共享内存、狮子和老虎谁厉害第一期连接: 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 。保持关注,空了弄个演示视频给大家把玩。目前还没有正式版发出,仅限学习使用。 |
|
|