由於我們網站(程式設計師在囧途)主做Go技術棧條線課程,在學員的建議下決定做個golang周報。定期寫一些 golang相關知識點、好庫推薦和個人觀點的表達。希望大家喜歡,文風可能比較犀利,恐會引起不適。
每周不定期更新2篇左右。
第一期周報連接:
一、關於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點,偶爾會產生「對罵」情景。
就連這些大佬對技術都這麼執著,何況我們?
更多信息戳原文了解更多