作為一名 Gopher,我們很容易形成一個編程慣例:每當有一個實現(xiàn)了 io.Closer 接口的對象 x 時,在得到對象并檢查錯誤之后,會立即使用 defer x.Close...
作為一名 Gopher,我們很容易形成一個編程慣例:每當有一個實現(xiàn)了 io.Closer 接口的對象 x 時,在得到對象并檢查錯誤之后,會立即使用 defer x.Close...
Go 語言通過 go 關(guān)鍵字開啟 goroutine 讓開發(fā)者可以輕松地實現(xiàn)并發(fā)編程,而并發(fā)程序的有效運行,往往離不開 sync 包的保駕護航。目前,sync 包的賦能列表包...
Go語言提供的協(xié)程goroutine可以讓我們很容易地寫出多線程程序,但是,如何讓這些并發(fā)執(zhí)行的goroutine得到有效地控制,這是我們需要探討的問題。正如小菜刀在《Gol...
本文旨在探討Go函數(shù)中的一個問題:為什么Go函數(shù)能支持多參數(shù)返回,而C/C++、java不行?這其實牽涉到了一個叫做函數(shù)調(diào)用慣例的問題。 調(diào)用慣例 在程序代碼中,函數(shù)提供了最...
單元測試 如果把開發(fā)程序比作蓋房子,那么我們必須確保所有的用料都是合格的,否則蓋起來的房子就會存在問題。對于程序而言,我們可以將蓋房子的磚頭、鋼筋、水泥等當做一個個功能單元,...
在《切片傳遞的隱藏危機》一文中,小菜刀有簡單地提及到切片擴容的問題。在讀者討論群中,有人舉了以下例子,想得到一個合理的回答。 為什么結(jié)果不是5,不是8,而是6呢?由于小菜刀在...
在《Go精妙的互斥鎖設計》一文中,我們詳細地講解了互斥鎖的實現(xiàn)原理?;コ怄i為了避免競爭條件,它只允許一個線程進入代碼臨界區(qū),而由于鎖競爭的存在,程序的執(zhí)行效率會被降低。同時我...
Some people, when confronted with a problem, think, “I know, I’ll use threads,” and the...
有群友說面試的時候被問到:單核CPU,開兩個goroutine,其中一個死循環(huán),會怎么樣?答案是:死循環(huán)的goroutine block住了但是完全不影響另一個gorouti...
為了保證程序的執(zhí)行高效與安全,現(xiàn)代編譯器并不會將程序員的代碼直接翻譯成相應地機器碼,它需要做一系列的檢查與優(yōu)化。Go編譯器默認做了很多相關(guān)工作,例如未使用的引用包檢查、未使用...
小菜刀最近在medium上閱讀了一篇高贊文章《Go and CPU Caches》,其地址為https://teivah.medium.com/go-and-cpu-cach...
目前小菜刀的項目中需要用到SQLite數(shù)據(jù)庫,https://github.com/mattn/go-sqlite3[https://github.com/mattn/go-...
今天逛github超市時,發(fā)現(xiàn)一個非常不錯的數(shù)據(jù)可視化庫go-echarts,特分享給大家。 介紹 在 Golang 這門語言中,目前數(shù)據(jù)可視化的第三方庫還是特別少,go-e...
提出疑問 在Go的源碼庫或者其他開源項目中,會發(fā)現(xiàn)有些函數(shù)在需要用到切片入?yún)r,它采用是指向切片類型的指針,而非切片類型。這里未免會產(chǎn)生疑問:切片底層不就是指針指向底層數(shù)組數(shù)...
在Go中,要理解channel,首先需要認識goroutine。 一、為什么會有g(shù)oroutine 現(xiàn)代操作系統(tǒng)中為我們提供了三種基本的構(gòu)造并發(fā)程序的方法:多進程、I/O多路...
由于本文篇幅較長,故將目錄整理如下 什么是Map 維基百科的定義 In computer science, an associative array, map, symbol...
string類型和[]byte類型是我們編程時最常使用到的數(shù)據(jù)結(jié)構(gòu)。本文將探討兩者之間的轉(zhuǎn)換方式,通過分析它們之間的內(nèi)在聯(lián)系來撥開迷霧。 兩種轉(zhuǎn)換方式 標準轉(zhuǎn)換 go中str...