由於我們網站(程式設計師在囧途)主做Go技術棧條線課程,在學員的建議下決定做個golang周報。定期寫一些 golang相關知識點、好庫推薦和個人觀點的表達。希望大家喜歡,文風可能比較犀利,恐會引起不適。
每周不定期更新2篇左右。
一、GORM 發布2.0
看這裡https://gorm.io/zh_CN/docs/v2_release_note.html
國內的ORM有幾個,我個人用的最順手的是Gorm ,雖也有缺點,但是再漂亮的臉蛋上都可能有雀斑。關鍵是要順手,這裡希望gorm越做越好。不排除後面我們要針對gorm做個腳手架
當然,這裡需要說的是,做項目並不能過度依賴ORM。看到很多同學脫離ORM後一句稍微複雜的SQL都寫不出,這是不對的。
二、gopsutil 性能監控
用過python的同學可能會知道有一個庫: psutil 。提供了便利的方法獲取系統信息:如CPU,內存,磁碟,網絡等,還可以判斷進程是否存在、獲取進程列表、獲取進程詳細信息等 適合做一些諸如採集系統信息和監控的服務。
那麼Go也有一個性能不錯的的移植庫。https://github.com/shirou/gopsutil
三、關於GO處理浮點數精度問題
1、go有個第三方包deciaml https://github.com/shopspring/decimal
2、資料庫層面,如mysql,可以用mySQL的decimal類型。
不過有個缺陷,到了Go代碼層面,尤其是做一些rpc神馬的,沒有原生的decimal類型支持。 所以 可以考慮把價格欄位拆成 2個int 。一個存小數點左邊,一個存小數點右邊。 到了代碼層面都用 int就OK了
四、Go和java做微服務哪個更有優勢。
此問題來自群友提問。
幾年前 確實 有「java和Go」優勢不優勢的問題。現在已經進入雲原生的年代,那麼「」誰比誰好「」這件事是不存在的。
1)GO做微服務也可能用到java技術棧的 cloud 組件(如nacos、sentinel)
2)java做微服務 也可能用GO技術棧的cloud組件(如jaeger)。
關鍵的,這兩者都離不開docker、k8s, service mesh (這些大部分是Go的天下)
單純論 web框架,在不同領域和業務場景 確實有優勢不優勢之說。 譬如某java框架在社區上比某Go框架全且更強大。Go某框架在某些場景中,開發效率比java某框架高一些
但是在微服務角度,這兩者只有你儂我儂、你是老漢我推車,沒有互相傷害
五、關於「敏感詞過濾「
這是一個學員提出來的問題。 除了使用關鍵字 一個個替換還有啥辦法? 或者說算法嗎?
這裡稍稍提示下。 除了硬替換,比較常用的算法就是前綴樹 ,之前有個課程 我們講到過golang實現前綴樹的簡單做法
前綴樹 主要用在 框架的路由上 。譬如/service/user/list 和/service/user/detail .他們都有公共前綴 /service/user/ , 利用前綴樹查詢性能更高
敏感詞過濾也一樣,譬如 來自 日本/美食,/日本/蒼老師 。。。 你懂~~~
六、最後不忘宣傳下我們。
大約是兩年前正式開始做go技術棧課程,由於我們本身是軟體公司,因此很多時候的課程素材取自於實際項目,所以很少會按部就班的教學,這點敬請諒解。從最早的Go單框架課程到微服務,再到目前正在逐步進入go雲原生技術棧課程,越做越嗨。 Go的精髓在雲原生、中間件,web開發只是其中一個很小部分。
很多同學有個小誤區,一接觸新語言立刻就是想把它用來做門戶網站,做爬蟲(想一想python)。學習一個語言,首先要了解它的擅長點,技術棧的領域是什麼,然後選擇適合自己的方向扒了猛幹~~~~,同時還要不斷關注市場方向,很多技術棧也是在市場的演化中不斷進行調整,從而形成目前的領域。
這裡再次放出我們目前Go學習路線, http://b.jtthink.com/read.php?tid=564 (每個月都會有進化和調整) 。明年主要的路線進入雲原生方向,更偏向原理級,敬請期待~~~
另外,想做一個好程式設計師?
其實是沒有「最好的程式設計師」的,必須是一個「不斷進化的程式設計師」才是好程式設計師。