作為一名 Gopher,我們很容易形成一個(gè)編程慣例:每當(dāng)有一個(gè)實(shí)現(xiàn)了 io.Closer 接口的對(duì)象 x 時(shí),在得到對(duì)象并檢查錯(cuò)誤之后,會(huì)立即使...
Go 語(yǔ)言通過(guò) go 關(guān)鍵字開(kāi)啟 goroutine 讓開(kāi)發(fā)者可以輕松地實(shí)現(xiàn)并發(fā)編程,而并發(fā)程序的有效運(yùn)行,往往離不開(kāi) sync 包的保駕護(hù)航。...
Go語(yǔ)言提供的協(xié)程goroutine可以讓我們很容易地寫(xiě)出多線程程序,但是,如何讓這些并發(fā)執(zhí)行的goroutine得到有效地控制,這是我們需要探...
本文旨在探討Go函數(shù)中的一個(gè)問(wèn)題:為什么Go函數(shù)能支持多參數(shù)返回,而C/C++、java不行?這其實(shí)牽涉到了一個(gè)叫做函數(shù)調(diào)用慣例的問(wèn)題。 調(diào)用慣...
單元測(cè)試 如果把開(kāi)發(fā)程序比作蓋房子,那么我們必須確保所有的用料都是合格的,否則蓋起來(lái)的房子就會(huì)存在問(wèn)題。對(duì)于程序而言,我們可以將蓋房子的磚頭、鋼...
在《切片傳遞的隱藏危機(jī)》一文中,小菜刀有簡(jiǎn)單地提及到切片擴(kuò)容的問(wèn)題。在讀者討論群中,有人舉了以下例子,想得到一個(gè)合理的回答。 為什么結(jié)果不是5,...
在《Go精妙的互斥鎖設(shè)計(jì)》一文中,我們?cè)敿?xì)地講解了互斥鎖的實(shí)現(xiàn)原理?;コ怄i為了避免競(jìng)爭(zhēng)條件,它只允許一個(gè)線程進(jìn)入代碼臨界區(qū),而由于鎖競(jìng)爭(zhēng)的存在,...
Some people, when confronted with a problem, think, “I know, I’ll use th...
Go是一門(mén)以并發(fā)編程見(jiàn)長(zhǎng)的語(yǔ)言,它提供了一系列的同步原語(yǔ)方便開(kāi)發(fā)者使用,例如sync包下的Mutex、RWMutex、WaitGroup、Onc...