golang不愧是Web時代的C語言
以前一直用的python,最近想做個利用web瀏覽器作為前後處理view層的有限元分析軟體的小專案,想著計算效率可能會成為一個瓶頸,而且每次十多萬的整數和浮點數傳輸不可能用文字格式,想用websocket。正好python也快用吐了,用golang換換口味。
前一個月看了看golang的go語言程式設計,又用gin寫了個簡單的curd。感覺還行。
然後開始正式擼一個將 abaqus 的inp檔案中的網格解析成用於顯示的三角面片,用於圖形顯示。
整個擼程式碼的過程中,就像是開著一輛卡車,一路上
首先是在python中最習慣的列表的map filter reduce操作,畢竟沒有泛型,我也有心裡準備。
比如 python 中的一句話
ys = [x*x for x in xs if x%2==0]
golang中需要這樣
ys:=make([]int,len(xs)) for _,x := range xs{ if x%2==0{ ys=append(ys,x*x) } }
雖然早聽說golang的目標是web時代的C,但一直也沒什麼感觸,有也只是往執行效率方面想。
直到碰到了要判斷一個集合中是否包含某個元素。
在python中也就是一個 in 的事情,比如
if a in xs: print('a in xs')
在golang中你需要手動的去遍歷這個slice,然後返回true 或 false。
[mathjax]
手動遍歷slice的時候自然而然就會想這個slice是不是經常要查詢,需不需要先排序,把查詢的複雜度從[latex]n[/latex]降到[latex]log(n)[/latex]
類似的這種還有 sort 函式等等。
突然讓我感慨,golang果然不愧是web時代的C,這讓我想彷彿回到用C的時候,寫業務邏輯程式碼之前要先設計資料結構。從最基本的List還是寫起,還要根據實際需求,決定這個List是單項還是雙向。業務中如果經常需要查詢操作,必然還要再寫一個搜尋二叉樹,設計一個struct的時候還要考慮位元組對齊的問題。
果然golang不愧是web時代的C。