原创 GO 單元測試之功能測試

前言 文件規範 函數規範 運行 檢測手段

原创 Go 併發控制context實現原理剖析 頂 原 薦

1. 前言 Golang context是Golang應用開發常用的併發控制技術,它與WaitGroup最大的不同點是context對於派生goroutine有更強的控制力,它可以控制多級的goroutine。 context翻譯成中文是"

原创 Go channel實現原理剖析 原 薦

1. 前言 channel是Golang在語言層面提供的goroutine間的通信方式,比Unix管道更易用也更輕便。channel主要用於進程內各goroutine間通信,如果需要跨進程通信,建議使用分佈式系統的方法來解決。 本章從源碼角

原创 Go defer實現原理剖析 頂 原 薦

1. 前言 defer語句用於延遲函數的調用,每次defer都會把一個函數壓入棧中,函數返回前再把延遲的函數取出並執行。 爲了方便描述,我們把創建defer的函數稱爲主函數,defer語句後面的函數稱爲延遲函數。 延遲函數可能有輸入參數,這

原创 GO 讀寫鎖實現原理剖析 頂 原

1. 前言 前面我們聊了互斥鎖Mutex,所謂讀寫鎖RWMutex,完整的表述應該是讀寫互斥鎖,可以說是Mutex的一個改進版,在某些場景下可以發揮更加靈活的控制能力,比如:讀取數據頻率遠遠大於寫數據頻率的場景。 例如,程序中寫操作少而讀操

原创 Go struct tag深入理解 頂 原

1. 前言 Go的struct聲明允許字段附帶Tag來對字段做一些標記。 該Tag不僅僅是一個字符串那麼簡單,因爲其主要用於反射場景,reflect包中提供了操作Tag的方法,所以Tag寫法也要遵循一定的規則。 2. Tag的本質 2.1

原创 【C/C++】Linux下system()函數引發的錯誤 頂 原

今天,一個運行了近一年的程序突然掛掉了,問題定位到是system()函數出的問題,關於該函數的簡單使用在我上篇文章做過介紹: http://my.oschina.net/renhc/blog/53580 先看一下問題

原创 系統函數dlopen()被劫持導致symbol找不到的問題記錄 頂 原 薦

問題現象 我們實現了一個名叫libilvrfplugin.so的lib,該lib鏈接了libiubsntconflib.so, 而libiubsntconflib.so 又鏈接了libipconflib.so, libipconflib.s

原创 Go goroutine調度 頂 原 薦

前言 Goroutine調度是一個很複雜的機制,儘管Go源碼中提供了大量的註釋,但對其原理沒有一個好的理解的情況下去讀源碼收穫不會很大。下面嘗試用簡單的語言描述一下Goroutine調度機制,在此基礎上再去研讀源碼效果可能更好一些。 1.

原创 裝修助手支持 頂 原

佔位

原创 Go select實現原理剖析 頂 原 薦

1. 前言 select是Golang在語言層面提供的多路IO複用的機制,其可以檢測多個channel是否ready(即是否可讀或可寫),使用起來非常方便。 本章試圖根據源碼總結其實現原理,從而發現一些使用誤區或解釋一些不太常見的現象。 2

原创 CppUtest發現的STL容器內存泄漏問題 頂 原 薦

今天在給代碼做UT時,某個case 中報出有內存泄露,提示信息可以看出泄漏的大小但沒有具體位置。定位問題的方法不再細述,主要是通過縮減代碼,逐步定位泄露地點。事後爲了便於說明問題,寫了兩個小巧的case,你能從下面兩個case中看出哪個存在

原创 GO 互斥鎖實現原理剖析 頂 原 薦

1. 前言 互斥鎖是併發程序中對共享資源進行訪問控制的主要手段,對此Go語言提供了非常簡單易用的Mutex,Mutex爲一結構體類型,對外暴露兩個方法Lock()和Unlock()分別用於加鎖和解鎖。 Mutex使用起來非常方便,但其內部實

原创 Go WaitGroup實現原理 頂 原 薦

1 前言 WaitGroup是Golang應用開發過程中經常使用的併發控制技術。 WaitGroup,可理解爲Wait-Goroutine-Group,即等待一組goroutine結束。比如某個goroutine需要等待其他幾個gorout

原创 Go 反射機制 頂 原 薦

1. 前言 個人覺得,反射講得最透徹的還是官方博客。官方博客略顯晦澀,多讀幾遍就慢慢理解了。 本文既是學習筆記,也是總結。 官方博客地址:https://blog.golang.org/laws-of-reflection 2. 反射概念