Hacker News

Ho utloisisa Go Compiler: The Linker

Ho utloisisa Go Compiler: The Linker Tlhahlobo ena e felletseng ea kutloisiso e fana ka tlhahlobo e qaqileng ea likarolo tsa eona tsa mantlha le litlamorao tse batsi. Libaka tsa Bohlokoa tsa Tsepamiso Lipuisano li shebane le: Mekhoa ea mantlha le pro...

10 min read Via internals-for-interns.com

Mewayz Team

Editorial Team

Hacker News

Ho Utloisisa Go Compiler: The Linker

The Go linker ke mokhahlelo oa ho qetela oa sesebelisoa sa Go compilation, se ikarabellang bakeng sa ho kopanya lifaele tsa ntho e hlophisitsoeng hore e be binary e le 'ngoe e ka phethoang. E rarolla litšupiso tsa matšoao, e fana ka liaterese tsa memori, 'me e hlahisa lenaneo le ikemetseng leo sistimi e sebetsang e ka e jarollang le ho sebetsa ntle le ho its'etleha kantle.

Bakeng sa dihlopha tsa boenjineri ba ahang sistimi ya tlhahiso — ho kenyeletswa le meaho ya motheo e kang Mewayz le 207-module business OS — ho utlwisisa se etsahalang mokgahlelong wa ho hokahana ho bohlokwa bakeng sa ho ngola software e sebetsang hantle, e ka sebediswang.

Ha e le hantle Go Linker e Etsa'ng?

Ka har'a ketane ea lisebelisoa tsa Go, ho bokella ho etsahala ka mekhahlelo e 'meli e meholo. Taba ea pele, moqapi (gc) o fetolela lifaele tsa Go source hore e be lifaele tse ikhethileng tsa meralo. Ebe sehokelo (cmd/link) se nka lifaele tseo tsa ntho ebe o li kopanya hore e phethahale. Le hoja moqapi a sebetsana le tlhahlobo ea syntax, ho hlahloba mofuta, le tlhahiso ea khoutu, sehokelo se sebetsana le mosebetsi oa sebaka le likamano oa ho bokella lenaneo.

Sehokelo se etsa lits'ebetso tse 'maloa tsa bohlokoa nakong ea ts'ebetso ena. E rarolla litšupiso tsohle tsa matšoao ho liphutheloana, ho bolelang hore mohala o mong le o mong oa ts'ebetso kapa litšupiso tse fapaneng tse tšelang moeli oa sephutheloana li hokahane le ts'ebetsong ea eona ea 'nete. E fana ka liaterese tsa memori ho ts'ebetso e 'ngoe le e' ngoe le ho feto-fetoha ha lefatše. E boetse e ngola binary ea ho qetela ka mokhoa o lebelletsoeng ke sistimi e sebetsang e lebeletsoeng - ELF bakeng sa Linux, Mach-O bakeng sa macOS, kapa PE bakeng sa Windows.

Ho fapana le lihokelo tsa C kapa C++, sehokelo sa Go se ngotsoe ho Go ka bosona. Qeto ena, e phethiloeng nakong ea boikitlaetso ba Go 1.5 bootstrap, e fa sehlopha sa Go taolo e felletseng holim'a ts'ebetso ea ho hokahanya le ho felisa ho itšetleha ka liketane tsa lisebelisoa tsa kantle bakeng sa meaho e mengata.

Go's Linker e Fapa Joang ho Traditional Linker?

Lihokelo tsa setso C/C++ ecosystem — GNU ld, khauta, kapa LLVM's lld — li sebetsa ka lifomete tse tloaelehileng tsa faele ea ntho joalo ka ELF e ka fallisoang. Go's linker e sebelisa sebopeho sa eona sa ntho e kahare, se e fang monyetla oa ho tenyetseha empa hape e bolela hore e teng tikolohong e batlang e le ka thoko.

  • Khokahano e tsitsitseng ka mokhoa oa kamehla: Go e hlahisa li-binaries tse hokahantsoeng maemong a mangata, e kenyelletsa nako eohle ea ho sebetsa le lintho tsohle tse itšetlehileng ka faeleng e le 'ngoe. Sena se fapana haholo le mananeo a C ao hangata a itšetlehileng ka lilaebrari tse arolelanoang ka matla.
  • Ha ho na mohato o arohaneng oa ho sebetsa: Sehokelo sa Go ha se hloke hore ho be le tharollo ea matšoao e fapaneng ka tsela eo lihokelo tsa li-pass tse peli li etsang. E sebetsana le liphutheloana ka tatellano ea ho itšetleha, eo moqapi a seng a e behile.
  • Pheliso ea khoutu e shoeleng: Sehokelo se tlosa ka matla mesebetsi e sa fihlelleheng le mefuta e fapaneng, e leng bohlokoa hobane laeborari e tloaelehileng ea Go e kholo. Ntle le sena, binary e 'ngoe le e 'ngoe e ne e tla jara boima ba liphutheloana tse sa sebelisoeng.
  • Khokahano ea nako: Sehokelo sa Go se tlameha ho kenya nako ea ho sebetsa ea Go — ho kenyeletsoa moqopi oa lithōle, mohlophisi oa lintho, le khoutu ea taolo ea mekotla - ho binary e 'ngoe le e 'ngoe. Ona ke boikarabello bo se nang ho bapa ka kotloloho ho C linking.
  • CGo bridging: Ha CGo e butswe, sehokelo sa Go se tlameha ho hokahana le sehokelo sa C sa sistimi ho sebetsana le difaele tsa ntho tse kopantsweng tsa Go/C, mme se ekelletsa ho rarahana ho hoholo tshebetsong.

Maikutlo a Bohlokwa: Filosofi ya moralo wa Go linker e etelletsa pele bonolo ba ho romela ho feta lebelo la moaho. Ka ho hlahisa li-binaries tse tsitsitseng ka botlalo tse nang le nako ea ho sebetsa e kenelletseng, Go e felisa karolo eohle ea litaba tsa tlhahiso - lilaebrari tse sieo tse arolelanoang, likhohlano tsa mofuta, le tharollo ea nako ea ho sebetsa - ka theko ea nako e telele ea lihokelo le li-binaries tse kholoanyane.

Hobaneng Tshebetso ea Linker e bile Phephetso e sa Feleng?

Ka lilemo tse ngata, Go linker e ne e le e 'ngoe ea likarolo tse liehang ka ho fetisisa tsa ho haha. Hobane e sebetsa lenaneong lohle ka nako e le 'ngoe ho fapana le liphutheloana ka bomong, e ke ke ea bapisoa le tsela eo pokello e ka bang ka eona. Sehlopha sa Go se tsetetse haholo ntlafatsong ea li-linker, haholo-holo ho Go 1.15 le 1.16, e hlahisitseng sebopeho se secha sa faele ea ntho le ho fokotsa tšebeliso ea memori ea li-link ka hoo e ka bang 30%.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Phephetso ea mantlha ke hore sehokelo se tlameha ho etsa ts'ebetso ea lenaneo lohle. E hloka pono ea lefats'e ea letšoao le leng le le leng, phalliso e 'ngoe le e' ngoe, le mofuta o mong le o mong o hlalosang lenaneong. Bakeng sa li-codebases tse kholo - mofuta oo sethala sa likhoebo se fanang ka matla ho basebelisi ba 138,000+ - sena se bolela hore sehokelo se sebetsana le matšoao a limilione ka nako e le 'ngoe.

Lintlafatso tsa morao-rao li tsepamisitse maikutlo ho fetoleng mosebetsi ho tloha ho sehokelo ho khutlela ho komporo. Ka ho etsa hore moqapi a hlahise lifaele tsa ntho tse felletseng ka phalliso e rarollotsoeng esale pele, sehokelo se ka etsa mosebetsi o fokolang ka nako ea khokahano. Ena ke tsoelopele e tsoelang pele ea meralo kahare ho ketane ea lisebelisoa tsa Go.

Sehokelo se Na le Karolo Efe ho Tšireletso ea Go's Binary?

Sehokelo se boetse se ikarabella bakeng sa likarolo tse 'maloa tse amanang le ts'ireletso ho Go binaries. E beha litumello tse ka sebelisoang likarolong tsa memori, ho netefatsa hore likarolo tsa data ha li sebetse le likarolo tsa khoutu ha li ngoloe. Ho li-platform tse tšehetsoeng, e thusa ASLR (Adress Space Layout Randomization) ka ho hlahisa lisebelisoa tse ikemetseng tse ikemetseng.

Ho qala ka Go 1.17, sehokelo se boetse se ts'ehetsa ho hlahisa li-binaries tse nang le tlhaiso-leseling e nepahetseng ea DWARF le metadata ea ho aha, e thusang ho hlahloba likotsi le netefatso ea phepelo ea software. Folakha ea -buildid, e sebetsoa ka nako ea lihokelo, e kentse sesupo se ikhethileng ho binary e 'ngoe le e 'ngoe bakeng sa netefatso ea moaho e ka hlahisoang hape.

Lipotso Tse Botsoang Hangata

Na o ka sebelisa sehokelo sa kantle le Go?

Ho joalo. Ha CGo e lumelletsoe kapa ha u fetisa -linkmode=external ho Go toolchain, e fana ka mohato oa ho qetela oa ho hokahanya sehokelo sa sistimi (hangata gcc kapa clang). Sena sea hlokahala ha lenaneo la hau le hokela khahlano le lilaebrari tsa C 'me e le boitšoaro bo sa feleng lipolaneteng tse ling. Khokahano ea ka hare, e sebelisang sehokelo sa Go's ka ho khetheha, e potlakile ebile e hlahisa meaho e bonolo empa e sitoa ho sebetsana le maemo a C.

Hobaneng di-binary tsa Go li le kholo ho feta li-C binaries?

Sehokelo sa Go se kenya nako eohle ea ho sebetsa ho binary e 'ngoe le e 'ngoe, ho kenyeletsoa moqopi oa lithōle, sehlophisi sa goroutine, netpoller, le boitsebiso ba mofuta oa reflection. Le lenaneo le lenyenyane la "Hello, World" le kenyelletsa nako ena ea ho sebetsa, e hlahisang li-binaries tse qalang ho pota 1-2 MB. Ho felisoa ha khoutu e shoeleng ea linker ho fokotsa sena haholo ho tloha ho seo e ka bang sona, empa sebaka sa ho sebetsa ha se khonehe. Ho sebelisa -ldflags="-s -w" ho hlobola tlhahisoleseling ea bothata mme ho ka fokotsa boholo ba binary ka 20-30%.

Sehokelo sa Go se sebetsa joang liphutheloana tse ngata tse nang le lebitso le tšoanang la lets'oao?

Go e sebedisa mabitso a matshwao a tshwanelehang ka botlalo a kenyeletsang tsela e felletseng ya ho reka thepa. Mosebetsi oa Arola ho encoding/json le mosebetsi Arola ka har'a sephutheloana sa hau li hlahisoa e le matšoao a fapaneng ka ho feletseng boemong ba sehokelo. Sebaka sena sa mabitso se behiloe ka har'a sebopeho sa faele ea ntho, kahoo ho thulana ha matšoao pakeng tsa liphutheloana tsa Go ho ke ke ha khoneha. Likhohlano li hlaha feela maemong a CGo moo matšoao a C a arolelanang sebaka sa mabitso sa lefatše lohle.

Haha Betere ka Lisebelisoa tse Nepahetseng

Ho utloisisa lisebelisoa tsa boemo bo tlase joalo ka Go linker ho fa lihlopha tsa boenjiniere monyetla o ka lekanyetsoang ha li hlahloba litaba tsa kaho, ho ntlafatsa lipeipi tsa CI, le ho romella lisebelisoa tse tšepahalang. Ho sebetsa ka mokhoa o ts'oanang le tabeng ea ho tsamaisa khoebo - ha u ntse u utloisisa haholoanyane ketane ea lisebelisoa tsa ts'ebetso ea hau, ke moo u sebetsang ka katleho.

Mewayz e u fa li-module tse 207 tse kopaneng ho laola khoebo ea hau kaofela - ho tloha taolong ea projeke le CRM ho isa ho li-invoice le tšebelisano ea sehlopha - ho qala ho $19/mo. Eba le basebelisi ba 138,000+ ba ntlafalitseng tšebetso ea bona ea mosebetsi. Qala ka Mewayz kajeno.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime