Stories

Detail Return Return

SegmentFault 思否技術週刊 Vol.62 — 你還想學 Go 語言嗎 ? - Stories Detail

本期技術週刊一起了解 Go 語言?,歡迎大家閲讀 ~

文章推薦

《手寫編程語言-實現運算符重載》 作者:crossoverJie

運算符重載其實並不是一個常用的功能;因為會改變運算符的語義,比如明明是加法卻在重載函數中寫為減法。

這會使得代碼閲讀起來困難,但在某些情況下我們又非常希望語言本身能支持運算符重載。

比如在 Go 中常用的一個第三方精度庫 decimal.Decimal,進行運算時只能使用 d1.Add(d2) 這樣的函數,當運算複雜時...

《Golang 實現多存儲驅動設計 SDK》作者:7small7

Gocache是一個基於Go語言編寫的多存儲驅動的緩存擴展組件。它為您帶來了許多緩存數據的功能。

  • 多個緩存驅動存儲:支持內存、redis或您自定義存儲驅動。支持如下功能:
  • 鏈式緩存:使用具有優先級順序的多個緩存(例如,內存然後回退到redis共享緩存)。
  • 可加載緩存:允許您調用回調函數將數據放回緩存中。
  • 指標緩存,可讓您存儲有關緩存使用情況的指標(命中、未命中、設置成功、設置錯誤……)。
  • 自動編組/解組緩存值作為結構的編組器。
  • 在存儲中定義默認值並在設置數據時覆蓋它們。
  • 通過過期時間和/或使用標籤緩存失效。
  • 泛型的使用。

《Go clientSet Watch 運行後隨機性失效》作者:建軍

List 和 Watch 機制是 kubernetes 中重要的機制之一。控制器通過 API Server 的 List API 來獲取所有最新版本的 API 對象,通過 Watch API 來監聽所有 API 對象的變化。

在程序設計過程中,往往也需要利用 List && Watch 機制,來觀察 API 對象的狀態,從而調用 EventHandler,做出響應。

基於此背景,Go 語言官方的 clientSet 中提供了相應的 API 接口供開發者使用。然而,筆者在使用 Watch 機制中踩到了不小坑。

《對 Go2 錯誤處理提案的批判》作者:煎魚

通過對 Go2 錯誤處理的設計草案的複習,我們瞭解到了 check 和 handle 函數的用法和思路。再針對新的語法,又對可能發生的新問題進行了 “批判”。

總的來説,新的語法,在弊端上會增加既有的代碼複雜度和可讀性,可以引發各種奇怪的嵌套,還會與 if err != nil 產生重複,變成了一種新的處理方式(多了一種)。

是否會還不如 if err != nil 那麼的純粹?

《Golang 中變量定義的坑》作者:kumfo

首先,文件結構如下:

.
├── a
│   └── a.go
├── b
│   └── b.go
├── go.mod
└── main.go

《幾個提升 Go 語言開發效率的小技巧》作者:asong

Go語言允許一個函數把任意數量的值作為參數,Go語言內置了...操作符,在函數的最後一個形參才能使用...操作符,使用它必須注意如下事項:

可變長參數必須在函數列表的最後一個;
把可變長參數當切片來解析,可變長參數沒有沒有值時就是nil切片
可變長參數的類型必須相同

《在 Go 裏用 CGO?這 7 個問題你要關注!》作者:煎魚

Cgo 是一項了不起的技術,它允許 Go 程序與 C 語言庫相互操作,這是一個非常有用的功能。

沒有它,Go 就不會有今天的地位。cgo 是在 Android 和 iOS 上運行 Go 程序的關鍵。

我個人認為 cgo 在 Go 項目中被過度使用了,當面臨在 Go 中重新實現一大段 C 語言代碼時,程序員會選擇使用 cgo 來包裝庫,認為這是個更容易解決的問題。但我認為這是一種錯誤的選擇行為。

顯然,在某些情況下,cgo 是不可避免的,最明顯的是你必須與圖形驅動或窗口系統進行互操作,而後者只能以二進制 blob 的形式提供。在這些場景下,cgo 的使用證明了它的權衡是合理的,比許多人準備承認的要少得多。

以下是一份不完整的權衡清單,當你把 Go 項目建立在 cgo 庫上時,你可能沒有意識到這些權衡。

問題推薦

Unanswered:

  • go byte 轉換為 string 混亂?
  • Golang 開發 UDP 組播在 windows10 上無法接收到消息?
  • 如何在 Goland 中使用 quantlib?
  • 用 go 的指針將 struct 相互轉換 byte 亂碼,請問這是什麼原因,應該如何解決?

Most frequent:

  • 請問 golang 如何導入自己的包?
  • go 語言,一個 redis 存 json 字符串問題?
  • golang 基礎,這段程序的結果為啥是奇數?
  • go 語言使用 errorgroup 當子協程發生 panic 怎麼通知主協程?
  • go 語言如何通過 channel 或 context 來實現協程等待?
  • go 中 NewReader 是讀取全部數據嗎?

# SegmentFault 技術週刊 #

「技術週刊」是社區特別推出的技術內容系列,一週一主題。

每週二更新,歡迎「關注」。大家也可以在評論處留言自己感興趣的主題,推薦主題相關的優秀文章。

如有問題可以添加小姐姐微信~

image.png

user avatar front_yue Avatar u_17443142 Avatar huanjinliu Avatar ansurfen Avatar tyltr Avatar tiandetuoba Avatar songzihuan Avatar xishui_5ac9a340a5484 Avatar weiwudejiqimao Avatar o2team Avatar jizaodebangbangtang Avatar marks Avatar
Favorites 13 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.