作為一名 Gopher茎毁,我們很容易形成一個(gè)編程慣例:每當(dāng)有一個(gè)實(shí)現(xiàn)了 io.Closer 接口的對(duì)象 x 時(shí)汉买,在得到對(duì)象并檢查錯(cuò)誤之后纽疟,會(huì)立即使用 defer x.Close...
作為一名 Gopher茎毁,我們很容易形成一個(gè)編程慣例:每當(dāng)有一個(gè)實(shí)現(xiàn)了 io.Closer 接口的對(duì)象 x 時(shí)汉买,在得到對(duì)象并檢查錯(cuò)誤之后纽疟,會(huì)立即使用 defer x.Close...
Go 語(yǔ)言通過(guò) go 關(guān)鍵字開(kāi)啟 goroutine 讓開(kāi)發(fā)者可以輕松地實(shí)現(xiàn)并發(fā)編程只祠,而并發(fā)程序的有效運(yùn)行枯怖,往往離不開(kāi) sync 包的保駕護(hù)航勒庄。目前挣轨,sync 包的賦能列表包...
Go語(yǔ)言提供的協(xié)程goroutine可以讓我們很容易地寫(xiě)出多線程程序军熏,但是,如何讓這些并發(fā)執(zhí)行的goroutine得到有效地控制卷扮,這是我們需要探討的問(wèn)題荡澎。正如小菜刀在《Gol...
本文旨在探討Go函數(shù)中的一個(gè)問(wèn)題:為什么Go函數(shù)能支持多參數(shù)返回均践,而C/C++、java不行摩幔?這其實(shí)牽涉到了一個(gè)叫做函數(shù)調(diào)用慣例的問(wèn)題彤委。 調(diào)用慣例 在程序代碼中,函數(shù)提供了最...
單元測(cè)試 如果把開(kāi)發(fā)程序比作蓋房子热鞍,那么我們必須確保所有的用料都是合格的葫慎,否則蓋起來(lái)的房子就會(huì)存在問(wèn)題。對(duì)于程序而言薇宠,我們可以將蓋房子的磚頭偷办、鋼筋、水泥等當(dāng)做一個(gè)個(gè)功能單元澄港,...
在《切片傳遞的隱藏危機(jī)》一文中椒涯,小菜刀有簡(jiǎn)單地提及到切片擴(kuò)容的問(wèn)題。在讀者討論群中回梧,有人舉了以下例子废岂,想得到一個(gè)合理的回答。 為什么結(jié)果不是5狱意,不是8湖苞,而是6呢?由于小菜刀在...
在《Go精妙的互斥鎖設(shè)計(jì)》一文中详囤,我們?cè)敿?xì)地講解了互斥鎖的實(shí)現(xiàn)原理财骨。互斥鎖為了避免競(jìng)爭(zhēng)條件藏姐,它只允許一個(gè)線程進(jìn)入代碼臨界區(qū)隆箩,而由于鎖競(jìng)爭(zhēng)的存在,程序的執(zhí)行效率會(huì)被降低羔杨。同時(shí)我...
Some people, when confronted with a problem, think, “I know, I’ll use threads,” and the...
Go是一門以并發(fā)編程見(jiàn)長(zhǎng)的語(yǔ)言捌臊,它提供了一系列的同步原語(yǔ)方便開(kāi)發(fā)者使用,例如sync包下的Mutex兜材、RWMutex理澎、WaitGroup、Once护姆、Cond矾端,以及抽象層級(jí)更高...
有群友說(shuō)面試的時(shí)候被問(wèn)到:?jiǎn)魏薈PU,開(kāi)兩個(gè)goroutine卵皂,其中一個(gè)死循環(huán)秩铆,會(huì)怎么樣?答案是:死循環(huán)的goroutine block住了但是完全不影響另一個(gè)gorouti...
為了保證程序的執(zhí)行高效與安全,現(xiàn)代編譯器并不會(huì)將程序員的代碼直接翻譯成相應(yīng)地機(jī)器碼殴玛,它需要做一系列的檢查與優(yōu)化捅膘。Go編譯器默認(rèn)做了很多相關(guān)工作,例如未使用的引用包檢查滚粟、未使用...
Go是一門帶有垃圾回收的現(xiàn)代語(yǔ)言寻仗,它拋棄了傳統(tǒng)C/C++的開(kāi)發(fā)者需要手動(dòng)管理內(nèi)存的方式,實(shí)現(xiàn)了內(nèi)存的主動(dòng)申請(qǐng)和釋放的管理凡壤。Go的垃圾回收署尤,讓堆和棧的概念對(duì)程序員保持透明,它增...
小菜刀最近在medium上閱讀了一篇高贊文章《Go and CPU Caches》亚侠,其地址為https://teivah.medium.com/go-and-cpu-cach...
目前小菜刀的項(xiàng)目中需要用到SQLite數(shù)據(jù)庫(kù)曹体,https://github.com/mattn/go-sqlite3[https://github.com/mattn/go-...
今天逛github超市時(shí),發(fā)現(xiàn)一個(gè)非常不錯(cuò)的數(shù)據(jù)可視化庫(kù)go-echarts硝烂,特分享給大家箕别。 介紹 在 Golang 這門語(yǔ)言中,目前數(shù)據(jù)可視化的第三方庫(kù)還是特別少滞谢,go-e...
提出疑問(wèn) 在Go的源碼庫(kù)或者其他開(kāi)源項(xiàng)目中串稀,會(huì)發(fā)現(xiàn)有些函數(shù)在需要用到切片入?yún)r(shí),它采用是指向切片類型的指針狮杨,而非切片類型母截。這里未免會(huì)產(chǎn)生疑問(wèn):切片底層不就是指針指向底層數(shù)組數(shù)...
在Go中,要理解channel橄教,首先需要認(rèn)識(shí)goroutine微酬。 一、為什么會(huì)有g(shù)oroutine 現(xiàn)代操作系統(tǒng)中為我們提供了三種基本的構(gòu)造并發(fā)程序的方法:多進(jìn)程颤陶、I/O多路...
由于本文篇幅較長(zhǎng),故將目錄整理如下 什么是Map 維基百科的定義 In computer science, an associative array, map, symbol...
string類型和[]byte類型是我們編程時(shí)最常使用到的數(shù)據(jù)結(jié)構(gòu)陷遮。本文將探討兩者之間的轉(zhuǎn)換方式滓走,通過(guò)分析它們之間的內(nèi)在聯(lián)系來(lái)?yè)荛_(kāi)迷霧。 兩種轉(zhuǎn)換方式 標(biāo)準(zhǔn)轉(zhuǎn)換 go中str...