聽課是真的累 @_@,學(xué)生時代過得真不容易。
兩天的會議,第一天還算認(rèn)真,就最后一個演講沒聽。
第二天實在累,腰酸背痛,就只聽了一個演講。
記錄一下主要的收獲。
4月27日
滴滴
關(guān)于做一個業(yè)務(wù)框架,學(xué)到了如下幾個不錯的點:
- 協(xié)議劫持 - 方便在框架層做一些通用的邏輯,如超時控制、trace等
- 超時控制 - 最上游來控制,防雪崩
Grab
主要了解了go在地圖類應(yīng)用的工程實踐,講到一些算法,僅限聽過,無法短時間完全掌握。
TiDB
講到了許多不錯的技巧
- 如何檢測 goroutine泄漏:在單元測試開始和結(jié)束時調(diào)用
runtime.Stack()去找到所有在運行的goroutine,比較是否有變化 - Apache Arrow這樣一個緊湊的數(shù)據(jù)表示格式
- 起初采用 go fail 這個有趣的工具,他們進行了自己的實現(xiàn)
Dave Cheny 講 Tests
講得比較基礎(chǔ),還是學(xué)到了一些有用的工具
- sub test
- go-cmp 用于比較以及diff,打印更可讀的test failure 信息
- unit test 的單元是 package
- 寫代碼的同時寫test(跟我想法一致)
bilibili 毛劍
- 一種error的封裝 github.com/pkg/errors Dave寫的,獲取根因,打印堆棧
- 把錯誤拋給調(diào)用者,由最頂層調(diào)用者打印。而不是到處打印錯誤信息(這個思路很好,到處打印錯誤日志的問題在我們自己項目中也存在)。有些通用的error如io.EOF之類的不要去wrap,可能有代碼直接調(diào)用 err == io.EOF 進行判斷。
- 服務(wù)間的錯誤碼如何處理:封裝一種結(jié)構(gòu),微服務(wù)間的錯誤碼局部消化,不隨意透傳。
- context - 入口設(shè)置超時(跟滴滴英雄所見略同)。超時傳遞:跨服務(wù)級別的全鏈路覆蓋
- context傳遞給新協(xié)程 - 用原來的copy一個新的,直接傳會有并發(fā)訪問問題。
- context.WithDeadline 忽略第二個參數(shù)會導(dǎo)致 泄漏?
- 顯式傳遞 > 隱式傳遞,context顯式傳遞,別包在struct里
新浪 鳥窩老師
講了很多關(guān)于并發(fā)的基礎(chǔ)知識,很詳盡很基礎(chǔ),坐等拿到ppt再認(rèn)真學(xué)習(xí)。
有一點記得比較清楚,mutex是不可重入的,func a調(diào)用func b,如果a 和b對同一個mutext進行l(wèi)ock,會死鎖。
百度
大概講了下百度用go的方方面面,之前參加過百度開放日的活動,所以已經(jīng)有所了解。比較觸動的是他們做依賴管理上付出的辛苦,不能訪問外網(wǎng)的編譯機,對第三方庫又有嚴(yán)格審核,確實不容易。作為一個開放的創(chuàng)業(yè)公司,對于政策原因偶爾翻墻失敗導(dǎo)致的依賴下不到就很頭大了。
另外提到了go get 協(xié)議,值得了解一下。
4月28日
下雨天很陰冷,肩膀又痛,瞎聽了一下,get到以下要點。
流利說
只聽了個結(jié)尾。
大概講了用 go 實現(xiàn) lexer & parser,講的比較基礎(chǔ),比較細(xì),留待以后查閱 ppt 和 源碼。
騰訊Tars
只聽了一部分。
對于系統(tǒng)的timer不滿意,自己基于 時間輪算法實現(xiàn)了一套timer,用到 sync.pool ?