Go周報2:埠掃描、json瓶頸、slice修改、微服務

2020-09-10 程式設計師在囧途001

由於我們網站(程式設計師在囧途)主做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點,偶爾會產生「對罵」情景。

就連這些大佬對技術都這麼執著,何況我們?

更多信息戳原文了解更多

相關焦點

  • Mix PHP V2.2 發布,與 go-micro 深度集成的 PHP 微服務開發框架
    .*: 基於 Swoole 的常駐內存型 PHP 高性能框架 V2.0: 基於 Swoole 的 FastCGI、常駐內存、協程三模 PHP 高性能框架 V2.1: 基於 Swoole 4.4+ 單線程協程 PHP 框架 V2.2: 基於 Swoole 4.4+ 單線程協程 PHP 微服務框架 🆕微服務開發
  • Mix PHP V2.2 發布,與 go-micro 深度集成的 PHP 微服務開發框架...
    .*: 基於 Swoole 的常駐內存型 PHP 高性能框架 V2.0: 基於 Swoole 的 FastCGI、常駐內存、協程三模 PHP 高性能框架 V2.1: 基於 Swoole 4.4+ 單線程協程 PHP 框架 V2.2: 基於 Swoole 4.4+ 單線程協程 PHP 微服務框架 🆕微服務開發本次版本更新主要是增加微服務開發相關的組件與開發骨架,從上一次 Mix V2.1 非常激進的切換為單線程協程後
  • 一道關於 json和 slice的題難倒了 80% 的人
    ) jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa)}
  • Go-Micro微服務入門(二):創建一個go-micro項目
    /order-srv/go.mod#將文件第一行的 module order-srv 修改為 module micro-demo/order-srv#解釋下為何這麼做:以微服務形式開發項目,那麼一個微服務就是一個可以獨立部署的模塊。
  • 快試試 go-zero 的微服務自動生成
    為什麼說做好微服務很難?go-zero微服務框架就是為此而生。另外,我們始終秉承工具大於約定和文檔的理念。我們希望儘可能減少開發人員的心智負擔,把精力都投入到產生業務價值的代碼上,減少重複代碼的編寫,所以我們開發了goctl工具。下面我通過書店服務來演示通過go-zero快速的創建微服務的流程,走完一遍,你就會發現:原來編寫微服務如此簡單!
  • Go 每日一庫之雲原生 go-zero 微服務框架
    使用 go-zero 的好處:輕鬆獲得支撐千萬日活服務的穩定性內建級聯超時控制、限流、自適應熔斷、自適應降載等微服務治理能力,無需配置和額外代碼微服務治理中間件可無縫集成到其它現有框架使用極簡的 API 描述,一鍵生成各端代碼自動校驗客戶端請求參數合法性大量微服務治理和並發工具包
  • 雲原生 go-zero 微服務框架
    使用 go-zero 的好處:輕鬆獲得支撐千萬日活服務的穩定性內建級聯超時控制、限流、自適應熔斷、自適應降載等微服務治理能力,無需配置和額外代碼微服務治理中間件可無縫集成到其它現有框架使用,經過仔細思考和對比,我們決定:基於 Go 語言高效的性能簡潔的語法廣泛驗證的工程效率極致的部署體驗極低的服務端資源成本自研微服務框架個人有過很多微服務框架自研經驗需要有更快速的問題定位能力更便捷的增加新特性2. go-zero 框架設計思考
  • 支持多語言的微服務框架Tars-Go
    工具 ,tars2go 基於巴科斯範式(BNF),這是一種描述程序語言結構的形式化方法,用來對 Tars 文件進行語法和詞法分析,生成相應的代碼,供客戶端和服務端使用。由一堆 woker Goroutine 組成,每個 Goroutine 基於 net.Conn 進行收發包、Tars 協議解碼,並經過 dispatcher(由 tars2go
  • go語言WebSocket編程實現聊天室小案例
    get -u -v github.com/gorilla/websocket1.1.2.舉個聊天室的小例子在同一級目錄下新建四個go文件connection.go|data.go|hub.go|server.go運行 go run server.go hub.go data.go connection.go運行之後執行local.html文件
  • Sensu Go從入門到放棄
     -y2、配置並啟動# curl -L https://docs.sensu.io/sensu-go/latest/files/backend.yml -o /etc/sensu/backend.yml# service sensu-backend 
  • 羅輯思維首席架構師:Go微服務改造實踐
    靜態調度是假設分配 5 個 go routine 來做處理,始終都有 5 個 go routine 來處理對應的請求。動態調度器是根據請求繁忙程度,在一個 go routine 最大值和最小值之間變化。
  • 基於GO語言實現web客服即時通訊與客服管理系統GO-FLY
    github地址:https://github.com/taoshihan1991/go-fly1.使用gin http框架實現restful風格的API和template包的模板語法進行展示界面2.使用jwt-go配合gin
  • Go實戰--微框架(Goji+Mongodb構建微服務)
    生命不止,繼續 go go go!!!//localhost:8080/books返回:// 20171220105345// http://localhost:8080/booksArray[2]("/thing", myHandler) goji.Serve()}12345678910111213141516171819Goji+Mongodb搭建微服務
  • Golang周報第一期:gorm2、微服務優勢、好程式設計師
    由於我們網站(程式設計師在囧途)主做Go技術棧條線課程,在學員的建議下決定做個golang周報。定期寫一些 golang相關知識點、好庫推薦和個人觀點的表達。希望大家喜歡,文風可能比較犀利,恐會引起不適。 每周不定期更新2篇左右。
  • GoFrame v1.6.0 發布,Go 應用開發框架
    方法調用時,自動轉換為And條件; 支持slice條件參數,常用在SELECT IN查詢中,例如:Where("uid IN(?)", g.Slice{1,2,3}); 支持在map類型條件參數的key中傳遞條件,例如:Where(g.Map{"uid>?"
  • 在微服務框架Demo中添加SkyWalking分布式鏈路追蹤
    也可以說明這三者之間的關聯關係2.:8080,10800,11800,12800,由於我本機安裝過apollo,8080ui埠已經被佔用,所以這裡我必須要先修改UI界面使用的8080埠才能啟動它。開始修改UI界面使用的8080埠(如果你的8080埠並沒有被佔用,可以跳過,不用修改)回到配置目錄的上一級:cd ..
  • go|優雅列印JSON字符串
    python在列印json時,可以使用json.dumps(data, indent=4)方式獲得漂亮的格式化輸出,其實go的原生庫也可以。代碼如下:import ( "encoding/json" "fmt" "log")type Server struct { Hostname string IPAddress string}func main() { s := Server{ Hostname: "server1",
  • Go-Micro微服務入門(一):環境搭建
    :source /etc/profile驗證go是否安裝成功:go version看到輸出類似下列內容即可:go version go1.13.3 linux/amd64安裝micro在任意目錄執行:go get github.com
  • [Go 語言教程] Go 語言簡介
    2 Go語言特性跨平臺的編譯型語言語法接近C語言管道(channel),切片(slice),並發(routine)有垃圾回收的機制支持面向對象和面向過程的編程模式3 Go 語言特色編程模式比較簡單,沒有複雜的設計模式全部源碼編譯到一個文件,編譯速度很快最新版本也有動態庫形式