202004-10 Go 中的 SetFinalizer 有什么用?怎么實現的? HOT 這篇文章基于 Go-1.12 版本 Go runtime 提供了一種允許開發者將一個函數與一個變量綁定的方法 runtime.SetFinalizer,被綁定的變量從它無法被訪問時就被垃圾回收器視為待回收狀態。這個特性引起了高度的爭論,但本文并不打算參與其中,而是去闡述這個方法的具體實現。 繼續閱讀 >
202003-28 如何用golang實現一個定時器任務隊列 HOT golang中提供了2種定時器timer和ticker(如果JS很熟悉的話應該會很了解),分別是一次性定時器和重復任務定時器。 繼續閱讀 >
202003-27 優雅地關閉或重啟 go web 項目 HOT 我們編寫的Web項目部署之后,經常會因為需要進行配置變更或功能迭代而重啟服務,單純的kill -9 pid的方式會強制關閉進程,這樣就會導致服務端當前正在處理的請求失敗,那有沒有更優雅的方式來實現關機或重啟呢? 繼續閱讀 >
202003-27 Go官方的限流器 time/rate 如何使用(一) HOT 本主題為系列文章,分上下兩篇。本文主要介紹time/rate的具體使用方法,下一篇文章將會著重介紹其內部實現原理。 繼續閱讀 >
202003-27 Go 1.14中值得關注的幾個變化 HOT Go 1.14的詳細變更說明在這里可以查看。整個版本的milestone對應的issue集合在這里。 不過目前Go 1.14在特定版本linux內核上會出現crash的問題,當然這個問題源于這些內核的一個已知bug。在這個issue中有關于這個問題的詳細說明,涉及到的Linux內核版本包括:5.2.x, 5.3.0-5.3.14, 5.4.0-5.4.1。本篇博客涉及的代碼在這里可以下載。 繼續閱讀 >
202003-27 Go 常量學習-可視化指南 HOT 一個常量只能在它的聲明的作用域內使用。如果你在更內部的作用域內以同樣的名字再聲明一個常量,那么這個常量僅僅在內部作用域內可以使用,并且在此作用域內將覆蓋外部聲明的常量。 繼續閱讀 >
202003-26 學習 Go 協程:詳解信道/通道 HOT goroutine 是 Go語言程序的并發執行的基本單元,多個 goroutine 的通信是需要依賴本文的主人公 —— channel 。channel,中文翻譯有叫通道,也有叫信道的。以下為了方便,我統一稱之為 信道 。 信道,就是一個管道,連接多個goroutine程序 ,它是一種隊列式的數據結構,遵循先入先出的規則。 繼續閱讀 >
202003-26 方便結構體和 map 賦值 HOT 今天我們介紹一個合并結構體字段的庫mergo。mergo可以在相同的結構體或map之間賦值,可以將結構體的字段賦值到map中,可以將map的值賦值給結構體的字段。 繼續閱讀 >
202003-26 在 Gin 框架中使用 JWT 認證 HOT JWT全稱JSON Web Token是一種跨域認證解決方案,屬于一個開放的標準,它規定了一種Token實現方式,目前多用于前后端分離項目和OAuth2.0認證的業務場景下。 繼續閱讀 >
202003-26 分析標準庫和優秀項目的接口:Go中接口應該這么定義 HOT 在 Go 語言中,接口定義了一套方法的集合,任何實現這些方法的對象都可以被認為實現了這個接口,這也稱作Duck Type。這不像其它語言比如 java,需要預先聲明類型實現了某個或者某些接口,這使得 Go 接口和類型變得很輕量級,它解耦了接口和具體實現的硬綁定。顯然這是 Go 的開發者深思熟慮的一個決定。 繼續閱讀 >
202003-26 用Go構建不可變的數據結構 HOT 共享狀態[1]是比較容易理解和使用的,但是可能產生隱晦以至于很難追蹤的 bugs。尤其是在我們的數據結構只有部分是通過引用傳遞的。切片就是這么一個很好的例子。后續我會作出更加詳細的講解。 繼續閱讀 >
202003-17 2020 重學 Go 系列:08. 面向對象編程:結構體與繼承 HOT 在之前學過的數據類型中,數組與切片,只能存儲同一類型的變量。若要存儲多個類型的變量,就需要用到結構體,它是將多個容易類型的命令變量組合在一起的聚合數據類型。 繼續閱讀 >
202003-17 2020 重學 Go 系列:09. 一篇文章理解 Go 里的函數 HOT 函數是基于功能或 邏輯進行封裝的可復用的代碼結構。將一段功能復雜、很長的一段代碼封裝成多個代碼片段(即函數),有助于提高代碼可讀性和可維護性。 繼續閱讀 >
202003-17 2020 重學 Go 系列:10. Go語言流程控制:if-else? 條件語句 HOT Go里的流程控制方法還是挺豐富,整理了下有如下這么多種: if - else 條件語句 switch - case 選擇語句 for - range 循環語句 goto 無條件跳轉語句 defer 延遲執行 繼續閱讀 >
202003-16 Micro In Action(三):調用服務 HOT 本文討論了如何調用一個已經存在服務。 micro 提供了豐富的工具, 可以用來在運行時查看服務狀態及調用服務方法。這其中既有命令行工具, 也有基于 web 界面工具。 最后,我們創建了一個客戶端項目,用代碼真正完成了服務的調用。 繼續閱讀 >
202003-12 使用 Go 和 LLVM 進行 Web Assembly 的高效前端開發 HOT 總的來說,我很高興在我的工具箱中再添加一個工具來更加簡單方便的創建 Web assembly。也許通過一些工作,tinygo 可以生成的更簡潔,并像 Rust 一樣在網絡的下一個技術平臺上堅實可靠。 繼續閱讀 >
202003-12 一個零 GC 的緩存庫:freecache HOT 今天給大家推薦一個零 GC 開銷、高并發性能的緩存庫:FreeCache,項目地址:https://github.com/coocood/freecache,Star 數:2.5k+。 繼續閱讀 >
202003-12 Micro In Action(一):入門 HOT 這個系列聊一聊 Micro, 我們將以實際開發微服務為主線,順帶解析相關功能。從最基本的話題開始,逐步轉到高級特性。 Micro 很強大,掌握后使用起來也相當便利。但它的演進速度非常快, 導致其文檔有嚴重缺失和滯后。 很多功能沒有文檔;很多基本問題不得不去 GitHub 上提 issue 或去 Slack 里面問,又得不到什么反饋。最后, 查看源碼成了唯一的學習途徑。這對于使用者來說非常不友好,阻礙了 Micro 被更多人所采用。 繼續閱讀 >
202003-12 “網紅” WebAssembly 與 K8s 如何實現雙劍合璧? HOT WebAssembly 技術已經走出瀏覽器,讓計算無處不在。本文利用 containerd 的擴展機制,可以為 WebAssembly 應用提供與其他容器應用一致的、抽象的、應用分發、交付和運維模型,可以在 Kubernetes 集群中進行統一調度和管理。 繼續閱讀 >
202003-11 Golang源碼系列四:Interface實現原理分析 HOT 接口是一種抽象類型,它沒有暴露所含數據的布局或者內部結構,當然也沒有哪些數據的基本操作,所提供的僅僅是一些方法。當你拿到一個接口類型的變量,你無從知道它是什么,但你能知道它能做什么,或者更精確地講,僅僅是它提供了哪些方法。 繼續閱讀 >
202003-11 Golang源碼系列三:Channel實現原理分析 HOT channel可以在兩個或者多個goroutine之間傳遞消息。在Go中,goroutine和channel是并發編程的兩大基石,goroutine用來執行并發任務,channel用來在goroutine之間來傳遞消息。 繼續閱讀 >