由于我们网站(程序员在囧途)主做Go技术栈条线课程,在学员的建议下决定做个golang周报。定期写一些 golang相关知识点、好库推荐和个人观点的表达。希望大家喜欢,文风可能比较犀利,恐会引起不适。
每周不定期更新2篇左右。
第一期周报连接:
一、关于Go做一些“不可描述”的事
前两天有个群友问我 Go能不能做 类似端口扫描等事宜。
这其实和语言无关,知道原理任何语言都能做。Go在安全攻防这块也有相应社区而且执行性能很不错,譬如基础库有这个:
完成类似 主机发现,端口扫描和服务枚举等事宜
大家可以看看人家的源码。 尤其是扫描端口这块。 最简单的方法 就是穷举端口,然后开N个协程 去DialTcp 。
二、关于内置库的json库的性能瓶颈
标准库的JSON库 性能很一般。在高并发传输和请求中可能会有瓶颈,前阶段有个学员提交了个性能问题,用的JSONRpc。
jsonrpc在rpc角度上是没有问题的(性能),而且简单易维护。但可能瓶颈会出在标准库的json处理上。
GO的JSON第三方库也有一些 如easyjson, ffjson、jsonparser 等。 整体来讲用在http api 显示一些什么商品信息什么的问题不大,包括内置包。,如果涉及到rpc、大量数据传输、并发较高的情况下,还是推荐使用protobuf 。性能评测网上有的是。
三、关于Go和python互调
很多公司并不是只有一个Go技术栈。诺,有个群友公司就是python+Go技术栈,于是就有了一个问题,以前的一些祖传库是python写的。又不想重写,GO能不能调。
最“麻瓜”的方法是,用python+某个api框架+祖传代码发布成http api
当然我猜想那肯定听到这菊都觉得紧了。那么介绍个库
Python本身支持C API。go又有cgo 无缝调用C。 于是两者苟且就没这么难了
四、关于slice是引用类型为啥要修改时传参还是要传指针
func change(s []int) {
s =s[1:]
}
arr := []int{1,2,3}
change(arr)
结果不会有变化。 其实slice本身是个复合结构,底层表现是这样的
type slice struct {
array unsafe.Pointer
len int
cap int
}
传参时 依然是赋值slice这个struc对象,并没有修改外部的slice对象。 那么正确写法是
func change(s *[]int) {
*s =(*s)[1:]
}
五、关于(程序员在囧途教育)go-micro微服务课程技术栈升级公告
由于技术发展过于迅猛。 go-micro 微服务课程 在10月底 将升级技术栈和环境
1、将采用全新3.x (现在的是2.x) ,新版可能有些坑,到时候课程里再排
2、结合rancher+k8s 实地部署演示和开发 。不再进行单机部署
3、之前的一些微服务组件 依然不变 。如配置中心、自建网关、链路监控等 。 go-micro自带的一些组件 不如 一些市面上现成的好
4、正式做功能 ,其中http api部分 将使用我们自己开发的gin脚手架 。
5、前端部分 不变 (后台 可能考虑 使用 我们wasm课程封装的elementui 同款界面—待定)
6、结合ci/cd等
为了真实 ,请大家提前准备好 环境 (至少2台虚拟机)。
六、关于大佬是否不需要学技术和努力了?
这个问题来自一个群友。 灌个鸡汤吧
我有个小圈子微信群,都是我以前的同事、朋友、同行,有些年龄已经40+。大部分是中大公司的IT管理者或高级管理者,几乎每隔几天 半夜都会讨论技术栈(不是语言)、技术细节和技术趋势等。有时会为了某些细节 争论到3-4点,偶尔会产生“对骂”情景。
就连这些大佬对技术都这么执着,何况我们?
更多信息戳原文了解更多