-
Go語言高并發時append方法偶現錯誤的解決方法
在實現圖片轉碼的需求時,需要支持最大 500 個圖片下載后轉換格式; 如果是一個一個下載后轉碼,耗時太長,需要使用 goroutine 實現 500 個圖片并發下載后,并發轉碼; 但自測過程中發現,會偶現下載后只轉換了 499 個圖片或更少的情況(全部下載、轉碼成功的條件下); 然后就開始了打印日志找 bug 的過程。 排查問題 因為并發時使用到了 sync 等待全部協程結束,起初以為是 sync 異步等待出了問題; 打印日志發現,正常執行了 500 次下載,執行完成下載之后,繼續執行的轉碼操作…
-
Go語言中淺拷貝和深拷貝的區別是什么?
要想搞明白深拷貝和淺拷貝的區別,我們需要先弄懂以下幾點: 一、值類型和引用類型 Go 語言里面變量有兩類,一類是值類型,一類是引用類型。 兩者區別是什么呢? 我們在電腦里面創建的變量,都是需要內存來存放的。 值變量就是直接,一個內存地址對應一個值。 而引用變量,則是某個值存放的是另一個值的地址。 我畫了一個邏輯圖,幫助我們去理解這個概念。 在 Go 語言中: string、int、bool、float 等這些都屬于值類型 slice、map、chan 等這些都屬于引用類型 二、什么是淺拷貝和深拷…