shenyi
管理员
管理员
  • UID1
  • 粉丝19
  • 关注0
  • 发帖数372
阅读:229回复:0

Golang周报第二期:端口扫描、json瓶颈、slice修改、微服务课程升级

楼主#
更多 发布于:2020-09-05 16:14
    由于我们网站主做Go技术栈条线课程,在学员的建议下决定做个golang周报。定期写一些 golang相关知识点、好库推荐和个人观点的表达。希望大家喜欢,文风可能比较犀利,恐会引起不适。
  每周不定期更新2篇左右。
  第一期周报连接:Golang周报第一期:gorm2、微服务优势、云原生、好程序员

   一、关于Go做一些“不可描述”的事
  前两天有个群友问我 Go能不能做 类似端口扫描等事宜。
  这其实和语言无关,知道原理任何语言都能做。Go在安全攻防这块也有相应社区而且执行性能很不错,譬如基础库有这个:
  https://github.com/marco-lancini/goscan      完成类似 主机发现,端口扫描和服务枚举等事宜
  大家可以看看人家的源码。 尤其是扫描端口这块。  最简单的方法 就是穷举端口,然后开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
  当然我猜想那肯定听到这菊都觉得紧了。那么介绍个库  https://github.com/sbinet/go-python
   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点,偶尔会产生“对骂”情景。
  就连这些大佬对技术都这么执着,何况我们?

最新喜欢:

979163895979163...
会讲故事的程序员
游客

返回顶部