Sat . 19 Oct 2019

Перайсці (мова праграмавання)

Gong часта называюць голанг - гэта бясплатная і з адкрытым зыходным кодам [12] мова праграмавання, створаная ў Google [13] у 2007 годзе Робертам Грыземерам, Роб Пікам і Кен Томпсанам [10]. Гэта традыцыйная мова, напісаная статычна. Algol і C, са зборам смецця, абмежаванай структурнай тыпізацыяй, [3] дададзены функцыі бяспекі памяці і функцыі паралельнага праграмавання ў стылі CSP [14]. Мова была абвешчана ў лістападзе 2009 года; ён выкарыстоўваецца ў некаторых вытворчых сістэмах Google [15], а таксама ў іншых фірмах Існуюць дзве асноўныя рэалізацыі: кампілятар Go, "gc", распрацоўваецца як праграмнае забеспячэнне з адкрытым зыходным кодам і нацэлена на розныя платформы, уключаючы Linux, OS X, Windows, розныя версіі BSD і Unix, а з 2015 года таксама мабільныя прылады, уключаючы смартфоны [16] Другі кампілятар, gccgo, з'яўляецца франтальнай часткай GCC [17] [18] Ланцуг інструментаў "gc" з'яўляецца самастойным хостынгам з версіі 15 [19]
Змест - 1 Гісторыя - 2 Моўная распрацоўка - 21 Крытыка - 22 Сінтаксіс - 23 тыпы - 231 Інтэрфейсная сістэма - 24 Пакетная сістэма - 25 Паралельнасць: гарадскія праграмы і каналы
251 Прыдатнасць для паралельнага праграмавання - 252 Адсутнасць бяспекі стану гонкі - 26 Прапускі - 3 Канвенцыі і стыль кода - 4 Моўныя інструменты - 5 Прыклады - 51 Прывітанне, свет
52 прыклад паралельнай валюты - 6 праектаў з выкарыстаннем Go - 7 Прыём - 8 Спрэчка з імем - 9 Глядзіце таксама - 10 Нататкі - 11 Спасылкі - 12 Знешнія спасылкі - 121 Супольнасць і канферэнцыі
Гісторыя
Перайсці на крыніцу у якасці эксперыменту інжынеры Google Роберт Грыземер, Роб Пік і Кен Томпсан распрацавалі новую мову праграмавання, якая дазволіла б раскрыць агульную крытыку іншых моў, захоўваючы іх станоўчыя характарыстыкі [20] Новая мова павінна была:
быць статычна набрана. , маштабуецца да вялікіх сістэм, як Java і C ++;
быць прадукцыйным і чытэльным, без занадта шмат абавязковых ключавых слоў і паўтарэння [21] "святло на старонцы", як дынамічныя мовы;
не патрабуецца інструментаванне, але падтрымліваю яго добра,
Падтрымка сетак і мультыпрацэсіроўка. У наступных інтэрв'ю ўсе тры дызайнеры мовы назвалі сваю непрыязнасць да складанасці C ++ галоўнай матывацыяй для распрацоўкі новай мовы [22] [23] [24]
Перайсці да 10 была выпушчана ў сакавіку 2012 года [25] - Go 17 дадала "адно змяненне мовы" [26] і адзін порт для macOS 1012 Sierra плюс некаторыя эксперыментальныя парты, напрыклад, для Linux на z Systems linux / s390x Некаторыя змены бібліятэкі прымяняюцца і напрыклад, зараз падтрымліваецца Unicode 90 - Моўная распрацоўка - распазнаецца Go у традыцыі С, але ўносіцца шмат змяненняў для паляпшэння сцісласці, прастаты і бяспекі. Ніжэй прыводзіцца кароткі агляд функцый, якія вызначаюць Go:
Сінтаксіс і навакольнае асяроддзе, прынятыя ў дынамічных мовах, больш распаўсюджаныя: [27]
Дадатковае кароткае абвяшчэнне зменнай і ініцыялізацыі з дапамогай высновы тыпу x: = 0 not var x int = 0;
Хуткія часы кампіляцыі [28] - Аддаленае кіраванне пакетам go get [29] і дакументацыя па анлайн-пакеце [30]
Адметныя падыходы да канкрэтных праблем:
Убудаваныя прымітывы ў паралельным парадку: лёгкія працэсы, працэдуры, працэдуры і каналы і выпіска. Інтэрфейсная сістэма замест віртуальнага спадчыны і ўстаўка тыпу замест невіртуальнай. наследаванне - ланцужок інструментаў, які па змаўчанні вырабляе статычна звязаныя народныя двайковыя файлы без знешніх залежнасцей
Жаданне захаваць спецыфікацыю мовы досыць простым, каб утрымліваць у галаве праграміста [31], часткова апусціўшы функцыі, агульныя для аналагічных моў Крытыка Крытыкі ism
Go сцвярджаюць, што: недахоп джынэрыкі часу кампіляцыі прыводзіць да дубліравання кода, метапраграмаванне не можа быць статычна праверана [32] [33], а стандартная бібліятэка не можа прапанаваць агульныя алгарытмы [34] | недахоп мовы пашырэнне, напрыклад, праз перагрузку аператара, робіць некаторыя задачы больш падрабязнымі [32] [35], - адсутнасць тыпавай сістэмы ўвядзення Хіндлі-Мілнера, якая перашкаджае бяспецы і / або экспрэсіўнасці [36] [37], - паўзы і накладныя выдаткі. Абмежаванне збору смецця GC выкарыстоўваць Go у сістэмным праграмаванні ў параўнанні з мовамі з ручным кіраваннем памяццю [32] [36]
Моўныя дызайнеры сцвярджаюць, што гэтыя кампрамісы важныя для поспеху Go [38] і тлумачаць некаторыя канкрэтныя рашэнні на даўжыня [39], хоць яны выражаюць адкрытасць да дадання нейкай формы агульнага праграмавання ў будучыні і да прагматычных паляпшэнняў у такіх галінах, як стандартызацыя спосабаў прымянення генерацыі кода [40] Што тычыцца GC, абаронцы Go паказваюць на памяншэнне часу на паўзу. версіі [41], напрыклад, Перайсці 16, калі пацверджаны g іх алгарытм GC не з'яўляецца цяжкім у рэжыме рэальнага часу - Syntax
Go сінтаксіс Go уключае ў сябе змены ад C, накіраваныя на захаванне сціслага і чытэльнага кода. Уводзіўся камбінаваны аператар дэкларавання / ініцыялізацыі, які дазваляе праграмісту пісаць i: = 3 або s : = "некаторыя словы" без указання тыпаў зменных. Гэта кантрастуе з int i C = 3; і const char s = "некаторыя словы"; Кропка з коскай па-ранейшаму сканчаецца выказваннямі, але неяўныя, калі яны будуць адбывацца ў канцы радка. Функцыі могуць вяртаць некалькі значэнняў, і вяртаючы вынік, пара памылак - гэта звычайны спосаб, калі функцыя паказвае на памылку свайго выклікаючага ў Go [a] Дадае літаральныя сінтаксісы для ініцыялізацыі параметраў структуры па імені, а таксама для ініцыялізацыі карт і зрэзаў. У якасці альтэрнатывы трохпавярховай заяве C для цыкла, выразы дыяпазону Go дазваляюць сцісла ітэраваць масівы, зрэзы, радкі, карты і каналы
Тыпы
Перайсці мае шэраг убудаваных тыпаў, уключаючы лікавыя байты, int64, float32 і г.д., булевыя радкі і радкі сімвалаў. убудаваныя аператары і ключавыя словы, а не функцыі, забяспечваюць злучэнне, параўнанне і кадаванне і дэкадаванне UTF-8 [42] Тыпы запісаў можна вызначыць з ключавым словам stru. Для кожнага тыпу T і для кожнай нязменнай цэлай канстанты n, ёсць пазначаны тып масіва [n] T; Такім чынам, масівы рознай даўжыні з'яўляюцца рознымі тыпамі. Дынамічныя масівы даступныя ў выглядзе "зрэзаў", пазначаных [] T для некаторых тыпаў T Яны маюць даўжыню і ёмістасць, вызначаючы, калі для пашырэння масіва неабходна вылучыць новую памяць. Некалькі зрэзаў могуць падзяляць іх базавая памяць [43] [44] [45]
Указальнікі даступныя для ўсіх тыпаў, а тып паказальніка на Т абазначаецца Т-прыёмам адрасоў і ўскосным выкарыстаннем & amp; і аператары, як у C, альбо здараюцца няяўна праз сінтаксіс доступу выкліку ці атрыбута [46] Няма арыфметыкі паказальніка, за выключэннем спецыяльнага тыпу unsafePointer у стандартнай бібліятэцы. Для пары тыпаў K, V, тыпу map [K] V - гэта тып хэш-табліц, якія адлюстроўваюць ключы тыпу K да значэнняў type V Табліцы хэша ўбудаваны ў мову, са спецыяльным сінтаксісам і ўбудаванымі функцыямі chan T - гэта канал, які дазваляе адпраўляць значэнні тыпу T паміж паралельныя працэсы Go - Акрамя падтрымкі інтэрфейсаў, сістэма тыпу Go з'яўляецца намінальнай: ключавое слова тыпу можа быць выкарыстана для вызначэння новага названага тыпу, які адрозніваецца ад іншых названых тыпаў, якія маюць аднолькавую кампаноўку ў выпадку структуры , адны і тыя ж удзельнікі ў тым жа парадку. Некаторыя пераўтварэнні паміж тыпамі, напрыклад, паміж рознымі тыпамі цэлых лікаў, загадзя вызначаныя, і даданне новага тыпу можа вызначаць дадатковыя пераўтварэнні, але пераўтварэнні паміж названымі тыпамі заўсёды павінны выклікаць відавочны характар [47] Напрыклад, Для вызначэння можна выкарыстоўваць ключавое слова тыпу ine-тып для IPv4-адрасоў, якія маюць 32-разрадныя цэлыя лікі:
тып ipv4addr uint32 - Пры такім вызначэнні тыпу ipv4addrx інтэрпрэтуе значэнне uint32 x як IP-адрас. Проста прысвоіўшы х зменнай тыпу ipv4addr - a памылка тыпу - Пастаянныя выразы могуць быць альбо набраныя, альбо "нетыпізаваныя"; ім прысвойваецца тып, калі прызначаецца набранай зменнай, калі значэнне, якое яны ўяўляюць, праходзіць праверку часу кампіляцыі [48] - Тыпы функцый пазначаюцца ключавым словам func; яны прымаюць нуль і больш параметраў і вяртаюць нулявыя і больш значэння, усе яны ўводзяцца Параметр і значэнні вяртання вызначаюць тып функцыі; Такім чынам, errorcstring, int32 int, памылка - гэта тып функцый, якія бяруць радок і 32-бітнае падпісанае цэлае лік, і вяртаюць падпісанае цэлае значэнне шырыні па змаўчанні і значэнне памылкі ўбудаванага інтэрфейсу. мае наборы метадаў, звязаных з ім. Прыклад IP-адрас вышэй можа быць пашыраны метадам пераўтварэння адрасу ў чытаным для чалавека ўяўленні, а менавіта, // // Гэта нулявы вяшчальны адрас 255255255255 - func addr ipv4addr ZeroBroadcast bool
У сувязі з намінальным тыпізацыяй, гэты метад вызначэння дадае метад ipv4addr, але не на uint32. У той час як метады маюць адмысловае вызначэнне і сінтаксіс выклікаў, не існуе асобнага тыпу метаду [49] - Сістэма інтэрфейсаў - Go прадастаўляе Дзве асаблівасці, якія замяняюць спадчыну класаў - Першая - гэта ўкладанне, якое можна разглядаць як аўтаматызаваную форму кампазіцыі [50] альбо дэлегацыю [51]: 255
Другая - гэта яе інтэрфейсы, якія забяспечваюць палімарфізм часу выканання [52]. : 266 Інтэрфейсы забяспечваюць абмежаваную форму структурнай тыпізацыі ў астатніх se Сістэма намінальнага тыпу Go Любы тып, які рэалізуе ўсе метады інтэрфейсу, адпавядае гэтаму інтэрфейсу. Інтэрфейсы Go былі распрацаваны па пратаколах з мовы праграмавання Smalltalk [53] Некалькі крыніц выкарыстоўваюць тэрмін набору тэксту качкі пры апісанні інтэрфейсу Go [54] [55] Хоць тэрмін набору тэксту качкі дакладна не вызначаны і, такім чынам, няправільны, звычайна гэта азначае, што адпаведнасць тыпу не статычна правяраецца. Паколькі адпаведнасць кампутару Go статычна правяраецца кампілятарам Go, за выключэннем выпадкаў выканання сцвярджэння тыпу, аўтары Go аддаюць перавагу выкарыстоўваць тэрмін структурная тыпізацыя - Інтэрфейс вызначае набор тыпаў, пералічваючы неабходныя метады і іх тыпы, і задавальняе любы тып, які мае неабходныя метады. Тыпы рэалізацыі не павінны ўказваць іх рэалізацыю інтэрфейсаў, так што калі Shape, Square і Circle вызначаюцца як: імпорт "матэматыка"
тып інтэрфейс формы - тып квадратны структура - func sq Плошча плошчы float64 - тып Circle structure - func c Circl e Area float64
тады і Square, і Circle няяўна ўяўляюць сабой Shape і могуць быць прызначаны зменнай тыпам Shape [52]: 263–268 У афіцыйнай мове сістэма інтэрфейсаў Go забяспечвае структурнае, а не намінальнае ўвядзенне інтэрфейсаў. з эфектам стварэння камбінаванага інтэрфейсу, які задавальняе менавіта тыя тыпы, якія рэалізуюць убудаваны інтэрфейс, і любыя метады, якія дадаюць нядаўна вызначаны інтэрфейс [52]: 270
Стандартная бібліятэка Go выкарыстоўвае інтэрфейсы для забеспячэння універсальнасці ў некалькіх месцах, уключаючы сістэму ўводу / вываду, заснаваную на канцэпцыях Reader and Writer [52]: 282–283
Акрамя метадаў выкліку праз інтэрфейсы, Go дазваляе пераўтвараць значэнні інтэрфейсу ў іншыя тыпы пры праверцы тыпу выканання. Канструкцыі мовы зрабіць гэта сцвярджэнне тыпу [56], якое правярае адзін тып патэнцыялу, і перамыкач тыпу [57], які правярае некалькі тыпаў. Пусты інтэрфейс - важны выпадак, таму што ён можа спасылацца да элемента любога канкрэтнага тыпу. Ён падобны на клас Object на Java або C #, але з той розніцай, што пусты інтэрфейс задавальняецца любым тыпам, уключаючы ўбудаваныя тыпы, напрыклад, Int як у Java і C #, зменная аб'ект можа трымаюць толькі асобнікі тыпу спасылкі [52]: код 284 з выкарыстаннем пустога інтэрфейсу не можа проста выклікаць метады або ўбудаваныя аператары на згаданы аб'ект, але ён можа захоўваць значэнне інтэрфейсу, паспрабуйце пераўтварыць яго ў больш карысны тып праз сцвярджэнне тыпу або перамыкач тыпу, альбо азнаёмцеся з пакетам адлюстравання Go [58], паколькі інтэрфейс можа спасылацца на любое значэнне, гэта абмежаваны спосаб пазбегнуць абмежаванняў статычнага набору тэксту, як пустэча на З, але з дадатковымі праверкамі тыпу выканання.
Значэнні інтэрфейсу рэалізуюцца пры дапамозе паказальніка на дадзеныя і другога паказальніка на інфармацыю пра час выканання [59] Як і некаторыя іншыя тыпы, рэалізаваныя з дапамогай паказальнікаў у Go, значэнні інтэрфейсу роўныя нулю, калі неинициализированный [60]
Сістэма пакетаў
У сістэме пакетаў Go кожны пакет мае шлях, напрыклад, "c ompress / bzip2 "або" golangorg / x / net / html ", а таксама імя, напрыклад, bzip2 або html. Спасылкі на азначэнні іншых пакетаў заўсёды павінны быць паказаны з назвай іншага пакета, і даступныя толькі вялікія імёны з іншых пакетаў: ioReader з'яўляецца агульнадаступным, але bzip2reader не з'яўляецца [61] Каманда go get можа атрымаць пакеты, якія захоўваюцца ў аддаленым сховішчы, напрыклад, GitHub, [62], і распрацоўшчыкам рэкамендуецца распрацоўваць пакеты ў базавым шляху, адпаведным сховішчам крыніцы, напрыклад githubcom / user_name / package_name для зніжэння верагоднасці сутыкнення імя з будучымі дапаўненнямі ў стандартную бібліятэку ці іншыя знешнія бібліятэкі [63]. Існуюць прапановы па ўвядзенні адпаведнага рашэння для кіравання пакетам для Go, падобнага на грузавую сістэму Руста ці на Npm-сістэму Node [64]
Паралельнасць: гарадскія праграмы і каналы
Мова Go мае ўбудаваныя сродкі, а таксама падтрымку бібліятэк для напісання адначасовых праграм. Паралельнасць адносіцца не толькі да паралелізму працэсара, але і да асінхроннасці: дазваляючы павольна Такія аперацыі, як выкананне базы дадзеных або сеткі, калі праграма выконвае іншую працу, як гэта бывае на серверах, заснаваных на падзеях [65] - Першасная канструкцыя паралельнасці - гэта праграма, тып лёгкага працэсу, які называецца функцыяй з прэфіксам Ключавое слова go запускае функцыю ў новай сістэме. Спецыфікацыя мовы не ўказвае, як павінны быць рэалізаваны працэдуры, але бягучыя рэалізацыі мультыплексуюць працэдуры працэдуры Go на меншы набор тэм аперацыйнай сістэмы, падобны на планаванне, выкананае ў Erlang [66]: 10
У той час як стандартны пакет бібліятэк, які змяшчае большасць класічных структур кіравання паралельнай валютай, замкі mutex і г.д., даступны [66]: 151–152 ідыёматычныя адначасовыя праграмы, а не аддаюць перавагу каналы, якія забяспечваюць адпраўку паведамленняў паміж гарадскімі працэдурамі [67] паведамленні ў парадку FIFO [51]: 43 і дазваляюць працягваць адпраўку гарадскіх праграм да таго, як будуць атрыманы паведамленні. Каналы набіраюцца, так што канал тыпу chan T можа быць выкарыстаны толькі для перадачы паведамленні тыпу T спецыяльны сінтаксіс; & lt; -ch - гэта выраз, які прымушае выконваючую функцыю блакаваць, пакуль не паступае значэнне над каналам ch, у той час як ch Існаванне набораў каналаў Аддзяляецца ад адначасовых моў акторскага стылю, такіх як Erlang, дзе паведамленні адрасаваны непасрэдна акцёрам адпаведныя гаратыне; стыль акцёра можа быць змадэляваны ў рэжыме Go, падтрымліваючы перапіску паміж гарадскімі каналамі і каналамі, але мова дазваляе некалькім гарадскім працэдурам дзяліцца каналам, альбо аднаму спосабу адпраўляць і атрымліваць па некалькіх каналах [66]: 147
З гэтых інструментаў можна пабудаваць адначасовыя канструкцыі, такія як пулы рабочых, трубаправоды, у якіх, скажам, файл дэкампрэсуецца і аналізуецца пры загрузцы, фонавыя званкі з таймаутам, «вывядзенне» паралельных выклікаў да набору паслуг і інш. [68] Каналы таксама знайшлі выкарыстанне, якое не адпавядае звыкламу паняццю міжпрацэнтнай камунікацыі, напрыклад, служыць бяспечным для парадку спісам перапрацаваных буфераў [69], ажыццяўляючы працэдуры, якія дапамаглі натхніць назву goutut, [70] і рэалізаваць ітэратары [71].
Структурныя канвенцыі, звязаныя з паралельнай валютай каналаў Go, і альтэрнатыўныя каналы ўводзяцца з мадэлі паслядоўных камунікацыйных працэсаў Тоні Хоара У адрозненне ад папярэдніх адначасовых моў праграмавання, такіх як Occam або Limbo, мова на над якім спрацаваў дызайнер Роб Пайк, [72] Go не дае ніякага ўбудаванага паняцця бяспечнай або праверанай сукупнасці [73]. У той час як мадэль зносін-працэсаў у Го пераважае, яна не адзіная: усе гарадскія працэдуры ў праграма падзяляе адзіную прастору адрасы Гэта азначае, што зменныя аб'екты і паказальнікі могуць падзяляцца паміж гарадскімі праграмамі; гл. § Адсутнасць бяспекі умоў гонкі, ніжэй
Прыдатнасць для паралельнага праграмавання
Хоць паралельныя функцыі Go не накіраваны ў першую чаргу на паралельную апрацоўку [65], яны могуць быць выкарыстаны для праграмавання шматпроцэсарных машын агульнай памяці. зроблена ў эфектыўнасці гэтага падыходу [74] Адно з гэтых даследаванняў параўноўвала памер кода і хуткасць праграм, напісаных дасведчаным праграмістам, не знаёмым з мовай і выпраўленнямі гэтых праграм экспертам Go ад распрацоўшчыка Google, якія рабілі тое ж самае для Chapel, Cilk і Intel TBB. Даследаванне паказала, што неэксперт імкнуўся пісаць алгарытмы "падзяліць і перамагчы" з адным заявай "хадзіць" за рэкурсію, у той час як эксперт пісаў праграмы "размеркаванне-праца-сінхранізацыя" з выкарыстаннем адной праграмы на працэсар. Праграмы звычайна былі больш хуткімі, але і даўжэйшымі [75] - Адсутнасць бяспекі ў стане гонкі - Не існуе ніякіх абмежаванняў у тым, каб гарадскія працэдуры атрымлівалі доступ да агульных дадзеных, дзякуючы чаму ўмовы гонкі ўдакладняюцца З іншага боку, калі праграма яўна не сінхранізуецца па каналах ці іншым спосабам, запіс з адной сістэмы можа быць часткова, цалкам альбо зусім не бачны іншаму, часта без гарантый наконт упарадкавання запісаў [73] Акрамя таго, унутраныя структуры дадзеных Go, такія як інтэрфейс значэнні, загалоўкі зрэзаў, хэш-табліцы і загалоўкі радкоў не застрахаваны ад умоў гонкі, таму бяспека тыпу і памяці можа парушацца ў шматпаточных праграмах, якія змяняюць агульныя асобнікі гэтых тыпаў без сінхранізацыі [76] [77]
Замест мовы падтрымка, бяспечнае паралельнае праграмаванне, такім чынам, абапіраецца на канвенцыі; напрыклад, Chisnall рэкамендуе фразеалагізм пад назвай "псеўданім xor mutable", гэта значыць, што перадача значэння, якое змяняецца, альбо паказальнік па каналу сігналізуе аб перадачы права ўласнасці на значэнне яго прымача [66]: 155
Прапускі
Перайсці наўмысна прапускае пэўныя функцыі, распаўсюджаныя ў іншых мовах, уключаючы ўспадкаванне рэалізацыі, агульнае праграмаванне, сцвярджэнні, арыфметыку паказальнікаў і няяўныя пераўтварэнні тыпу. З гэтых моўных функцый аўтары Go выказваюць адкрытасць да агульнага праграмавання, відавочна выступаюць супраць сцвярджэнняў і арыфметыкі паказальнікаў, абараняючы выбар апусціць спадчыну тыпу як больш карысную мову, заахвочваючы замест выкарыстання інтэрфейсаў для дасягнення дынамічнай адпраўкі [b] і кампазіцыі для паўторнага выкарыстання кода. Склад і дэлегацыя на самой справе ў значнай ступені аўтаматызаваны ўкладаннем структуры; Па словах даследчыкаў Шмагера і інш, гэтая асаблівасць "мае мноства недахопаў атрымання спадчыны: яна ўплывае на публічны інтэрфейс аб'ектаў, яна не з'яўляецца дробназярністай, г.зн. кантроль на ўзроўні метадаў убудавання не можа быць схаваны". і гэта статычна ", што робіць" невідавочным ", ці будуць праграмісты не злоўжываць імі ў той ступені, у якой праграмісты на іншых мовах лічацца празмерным выкарыстаннем спадчыны [50]
Што тычыцца агульнага праграмавання, то некаторыя ўбудаваныя функцыі на самай справе тып - агульныя, але гэта трактуюцца як асаблівыя выпадкі; Роб Пайк называе гэта слабасцю мовы, якая можа ў нейкі момант змяніцца [43] Каманда Google, якая распрацоўвае мову, пабудавала хаця б адзін кампілятар для эксперыментальнага дыялекту Go з генерыямі, але не выпусціла яго [78]
Пасля першапачатковага апушчэння выключэнняў у мову быў дададзены механізм панікі / аднаўлення, які нагадвае выключэнне, які аўтары Go раяць выкарыстоўваць для незваротных памылак, напрыклад, тых, якія павінны спыніць запыт усёй праграмы ці сервера, альбо ў якасці цэтліка для распаўсюджвання памылак. стэк у пакеце, але не праз межы пакета; там вяртанне памылак - стандартны API [79] [80] [81] [82] - Канвенцыі і стыль кода
Аўтары Go прыклалі значныя намаганні для фарміравання стылю і дызайну праграм Go:
, інтэрвал і іншыя дэталі кода на паверхневым узроўні аўтаматычна стандартызуюцца інструментам gofmt. golint робіць дадатковыя праверкі стылю аўтаматычна. Інструменты і бібліятэкі, распаўсюджаныя з Go, прапануюць стандартныя падыходы да такіх рэчаў, як дакументацыя API godoc [83], тэставанне прайсці тэст, будаваць ісці будаваць, кіраванне пакетамі ісці і гэтак далей
Go выконвае правілы, якія з'яўляюцца рэкамендацыямі на іншых мовах, напрыклад, забараняючы цыклічныя залежнасці, нявыкарыстаныя пераменныя ці імпарт, і няяўныя пераўтварэнні тыпу. Апушчэнне некаторых функцый, напрыклад , цэтлікі функцыянальнага праграмавання, такія як карта і C ++, паспрабуйце / нарэшце, блокі імкнуцца заахвочваць пэўны відавочны, канкрэтны і імператыўны стыль праграмавання. У першы дзень каманда Go апублікавала калекцыю ідыёмаў Go, а пазней таксама сабрала код r каментары eview, размовы, афіцыйныя паведамленні ў блогу, каб выкладаць стыль Go і філасофію кадавання - Моўныя інструменты - Go ўключае ў сябе аднолькавы інструмент адладкі, тэсціравання і праверкі кода, як і мноства распаўсюджванняў моў. Раздзел Go уключае сярод іншых інструментаў ,
go build, які будуе Go binaries, выкарыстоўваючы толькі інфармацыю ў саміх зыходных файлах, ніякіх асобных файлаў - тэст go, для тэставання блока і мікраблокаў
go fmt, для фарматавання кода - go get, for пошук і ўстаноўка аддаленых пакетаў - ідзіце ветэрынар, статычны аналізатар, які шукае патэнцыйныя памылкі ў кодзе: запусціце, цэтлік для стварэння і выканання кода ў godoc, для адлюстравання дакументацыі або абслугоўвання праз HTTP
gorename , для перайменавання зменных, функцый і гэтак далей бяспечным для тыпу спосабам - ідзі генераваць, стандартны спосаб выкліку генератараў кода - Ён таксама ўключае ў сябе падтрымку прафілявання і адладкі, інструменты выканання, напрыклад, адсочваць збор смецця паўзы і тэстар стану гонкі - Ёсць ecosys Інструменты старонніх інструментаў, якія дадаюць да стандартнага размеркавання, такія як gocode, які дазваляе аўтаматычнае завяршэнне кода ў многіх тэкставых рэдактарах, goimports члена каманды Go, які аўтаматычна дадае / выдаляе імпарт пакета па меры неабходнасці, errcheck, які выяўляе код, які можа ненаўмысна ігнараваць памылкі, і больш убудоваў існуе, каб дадаць моўную падтрымку ў шырока выкарыстоўваюцца тэкставыя рэдактары, і, па меншай меры, адзін IDE, LiteIDE, называецца "простым, з адкрытым зыходным кодам, кросплатформенным ідэнтыфікатарам Go" [84]
Прыклады
Hello world
Вось праграма Hello world у Go:
асноўны пакет пакета - імпарт "fmt"
mainc main
прыклад сумеснай валюты
Наступная простая праграма дэманструе функцыі паралельнасці Go для таго, каб рэалізацыя асінхроннай праграмы. Ён запускае дзве лёгкія тэмы "гарадскіх працэдур": адзін чакае, калі карыстальнік увядзе нейкі тэкст, а другі рэалізуе тайм-аўт. Выпіска чакання чакае, калі адна з гэтых гарадскіх праграм адправіць паведамленне ў асноўны рэжым, і дзейнічае на прыкладанне першага паведамлення, якое прыйшло, адаптаванае з Chisnall [66]: 152 - асноўны пакет - імпарт - "fmt"
"час" - func readwordch chan string - func timeoutt chan bool - func main
Праекты з выкарыстаннем Go
У гэтым раздзеле занадта шмат абапіраецца на спасылкі на першасныя крыніцы. Калі ласка, палепшыце гэты раздзел, дадаўшы другасныя ці троесныя крыніцы Лістапад 2015 Даведайцеся, як і калі выдаліць гэтае шаблоннае паведамленне. Некаторыя прыкметныя праграмы з адкрытым зыходным кодам у Go ўключаюць:
Docker, набор інструментаў для разгортвання кантэйнераў Linux - Doozer, служба блакавання, якая кіруецца пастаўшчыком хостынгу Heroku [14] - Geth Ethereum, агульная сусветная вылічальная платформа - InfluxDB, база дадзеных з адкрытым зыходным кодам спецыяльна для апрацоўваць дадзеныя часовага шэрагу з высокай даступнасцю і высокімі патрабаваннямі да прадукцыйнасці - Juju, інструмент для аркестрацыі сэрвісу ад Canonical, упакоўшчык Ubuntu Linux - Packer, інструмент для стварэння аднолькавых малюнкаў машын для некалькіх платформаў з адной канфігурацыі крыніцы
Snappy, менеджэр пакетаў для тэлефона Ubuntu, распрацаваны кампаніяй Canonical
Syncthi ng, кліент / сервернае прыкладанне сінхранізацыі файлаў з адкрытым зыходным кодам
Некаторыя прыкметныя рамкі з адкрытым зыходным кодам пры дапамозе Go:
Beego, высокапрадукцыйная сеткавая сетка ў Go, якая выкарыстоўваецца для вэб-прыкладанняў і сервісаў сервісаў серфінгу [неабходная цытата]
Марціні, пакет для вэб-прыкладанняў / паслуг [неабходнае цытаванне]
Gorilla, вэб-інструментар для Go [неабходнае цытаванне]
Enduro / X ASG, прамежкавае праграмнае забеспячэнне кластара, сервер прыкладанняў, размеркаваная транзакцыя і мультыапрацоўчая рамка для Перайсці [неабходнае цытаванне] - Іншыя вядомыя кампаніі і сайты, якія выкарыстоўваюць Go звычайна разам з іншымі мовамі, не ўключаюць выключна: [85] [самаапублікаваная крыніца] [86]
AeroFS, прыватны пастаўшчык даменных прылад для абмену файламі, які перанес некаторыя мікрасэрвісы ад Java to Go з асноўнымі паляпшэннямі памяці памяць [87] - Чанга, праграмная рэкламная кампанія выкарыстоўвае Go у сваіх сістэмах таргоў у рэжыме рэальнага часу [88] - Cloud Foundry, платформу як паслугу [неабходнае цытаванне]
CloudFlare, для іх проксі-кадзіравальнага проксі Railgun, іх размеркаванай службы DNS, a а таксама інструменты для крыптаграфіі, вядзення часопісаў, апрацоўкі патокаў і доступу да сайтаў SPDY [89] [90] - CoreOS, аперацыйная сістэма на базе Linux, якая выкарыстоўвае кантэйнеры Docker [91] - паслугі Couchbase, запыты і індэксаванне ў межах Couchbase Server [92] - Dropbox, перанес некаторыя з іх важных кампанентаў з Python у Go [93]
Google, для многіх праектаў, у тым ліку сервера загрузкі dlgooglecom [94] [95] [96]
MercadoLibre, для некалькіх публічных API [неабходнае цытаванне] - MongoDB, інструменты для кіравання асобнікамі MongoDB [97] - Netflix, для двух частак іх архітэктуры сервера [98] - Novartis, для ўнутранай сістэмы інвентарызацыі [цытаванне неабходна]
Plugdj, інтэрактыўны інтэрнэт-сайт для струменевай сацыяльнай музыкі [99] - Рэплікаваны, Doa на аснове PaaS для стварэння карпаратыўнага, усталяванага праграмнага забеспячэння [100]
SendGrid, Boulder, Каларада, транзакцыйная дастаўка і кіраванне электроннай поштай. паслуга [101] - SoundCloud, для «дзясяткаў сістэм» [102] - Сплайс, для ўсяго API бэкэнда і аналізатараў электронная інтэрнэт-платформа для музычнай калабарацыі [103] - ThoughtWorks, некаторыя інструменты і прыкладанні вакол бесперапыннай дастаўкі і імгненных паведамленняў CoyIM [104]
Twitchtv, каб іх сістэма чатаў на аснове IRC перайшла з Python [105]
Uber, для апрацоўкі вялікіх аб'ёмаў запытаў на аснове геофаса [106]
Zerodha, для пірынгу ў рэжыме рэальнага часу і перадачы рынкавых дадзеных [неабходнае цытаванне]
Прыём | Першапачатковы рэліз Go пацягнуў за сабой шмат дыскусій
Сістэма інтэрфейсаў, і наўмыснае ўпушчэнне спадчыны атрымалі высокую ацэнку Мікеле Сіміятана, які параўнаў гэтыя моўныя характарыстыкі з тыпамі Standard ML, назваўшы гэта "ганьбай, што ніякая папулярная мова не рушыла па [гэтым] канкрэтным маршруце ў дызайнерскай прасторы" [107]
Дэйв Астелс з Engine Yard пісаў: [108]
Go пагрузіцца надзвычай лёгка Ёсць мінімальная колькасць асноўных моўных паняццяў, а сінтаксіс чысты і створаны, каб быць ясным і адназначным. Дагэтуль усё яшчэ эксперыментальна і яшчэ мала шурпатыя па краях - Ars Technica intervie шлюб Роб Пайк, адзін з аўтараў Go, і спытаў, навошта патрэбна новая мова. Ён адказаў, што: [109]
Гэта было недастаткова проста дадаць функцыі да існуючых моў праграмавання, таму што часам можна атрымаць дадатковую інфармацыю ў у канчатковым рахунку, адбіраючы рэчы. Яны хацелі пачаць з нуля і пераасэнсаваць усё [Але яны не хацелі] адыходзіць занадта шмат ад таго, што распрацоўшчыкі ўжо ведалі, бо хацелі пазбегнуць адчужэння мэтавай аўдыторыі Go. Год паводле Індэкса супольнасці праграмавання TIOBE, які адбыўся ў першым годзе 2009 г., за 12-месячны рост папулярнасці толькі за 2 месяцы, пасля яго ўвядзення ў лістападзе, чым любая іншая мова ў гэтым годзе, і да студзеня 2010 года дасягнуў 13-га месца, [110] Перасягнуўшы ўсталяваныя мовы, такія як Паскаль. Да чэрвеня 2015 года яго рэйтынг апусціўся да 50-га паказчыка ў індэксе, што стала ніжэйшым за COBOL і Fortran [111]. Па стане на верасень 2016 года [абнаўленне] яго рэйтынг падняўся да 19-га, што сведчыць значны рост Па папулярнасці і прыняццю [112]
Што тычыцца Go, Брус Эккель заявіў: [113]
Складанасць C ++ яшчэ больш складаная была дададзена ў новы C ++, а ўзніклы ў выніку ўплыў на прадукцыйнасць больш не апраўданы. Усе абручы, праз якія праграміст C ++ мусіў пераскокваць, каб выкарыстоўваць мову, сумяшчальную з C, ужо не маюць сэнсу - яны проста марная трата часу і сіл. Go мае значна большае значэнне для класа праблем, які першапачаткова быў C ++. прызначаны для вырашэння
ацэнкі мовы і яе рэалізацыі gc у параўнанні з C ++ GCC, Java і Scala інжынерам Google выявіў, што:
Go прапануе цікавыя моўныя функцыі, якія таксама дазваляюць скласці сціслыя і стандартызаваныя абазначэнні. Кампілятары для гэтай мовы па-ранейшаму няспелыя, што адлюстроўвае як прадукцыйнасць, так і бінарны памер. - R Hundt [114]
Ацэнка атрымала абвяржэнне ад каманды распрацоўшчыкаў Go Ian Lance Taylor, якая палепшыла код Go для У дакуменце Гундта не было вядома пра намер Іён публікуе свой код і кажа, што яго версія "ніколі не павінна была быць прыкладам ідыёматычнага або эфектыўнага". Затым Расс Кокс аптымізаваў код Go, а таксама код C ++, і прымусіў код Go працаваць трохі хутчэй, чым C ++ і больш, чым на парадак хутчэй, чым "аптымізаваны" код у дакуменце [115]
Спрэчка з імем
10 лістапада 2009 г., у дзень агульнага выпуску мовы, Фрэнсіс МакКабі, распрацоўшчык Go! мова праграмавання звярніце ўвагу на клічнік, папрасіўшы змяніць назву мовы Google, каб не дапусціць блытаніны з яго мовай, якую ён правёў 10 гадоў, распрацоўваючы [116] МакКабі выказаў занепакоенасць тым, што "вялікі хлопец" у канчатковым выніку пераправіцца над ім " , і гэта непазбежнае водгук атрымала больш за 120 распрацоўшчыкаў, якія пракаментавалі афіцыйныя тэмы Google, заявіўшы, што яны павінны змяніць назву, а некаторыя [117] нават кажуць, што гэта пытанне супярэчыць дэвізу Google: "Не будзь зло" [118] закрыты распрацоўшчыкам Google 12 кастрычніка 2010 года з карыстацкім статусам "Няшчасны" і наступным каментарам: "Існуе шмат вылічальных прадуктаў і паслуг, названых Go. За 11 месяцаў пасля нашага выпуску адбылася мінімальная блытаніна на дзвюх мовах".
Глядзіце таксама
Партал бясплатнага праграмнага забеспячэння - Параўнанне моў праграмавання - Дарт, іншая мова праграмавання Google - UFCS, спосаб «адкрытых метадаў» на іншых мовах
Заўвагі
^ Звычайна гэта дакладна адзін з вынікаў і значэнні памылкі маюць значэнне, якое не з'яўляецца нулявым значэннем тыпу; часам і тое, і іншае, як калі чытанне альбо запіс можа быць часткова завершана, а часам і ні, як, калі чытання вяртае 0 байт. Гл. праблема Semipredicate: Шматзначнае вяртанне
^ Пытанні "Як атрымаць дынамічную адпраўку метадаў" і " Чаму не існуе спадчыны тыпу "на мове FAQ [10]
Спасылкі
Гэты артыкул утрымлівае матэрыял з афіцыйнага ўрока Go, які ліцэнзуецца па ліцэнзіі Creative Commons Attribution 30
^" FAQ - The Go Мова праграмавання "Golangorg Retrieved 2013-06-25
^" Гісторыя рэлізаў - The Go Programming Language "golangorg Праверана 19 кастрычніка 2016 г.
^ ab" Чаму не ісці "Дэкларацыі" рэалізуе "golangorg Праверана 1 кастрычніка 2015 г.
^ Шчука, Роб 2014-12-22 "Роб Піка ў Твітэры" Праверана 13.03.2016 Go мае структурнае набору тэксту, а не ўвод качкі Поўнае задавальненне інтэрфейсам правяраецца і патрабуецца
^ "lang / go: go- 14 – Go programming language" OpenBSD ports 2014-12-23 Retrieved 2015-01-19 
^ "Go Porting Efforts" G o Language Resources cat-v 12 January 2010 Retrieved 18 January 2010 
^ "Text file LICENSE" The Go Programming Language Google Retrieved 5 October 2012 
^ "Additional IP Rights Grant" The Go Programming Language Google Retrieved 5 October 2012 
^ a b Pike, Rob 2014-04-24 "Hello Gophers" Retrieved 2016-03-11 
^ a b c "Language Design FAQ" golangorg 16 January 2010 Retrieved 27 February 2010 
^ "The Evolution of Go" Retrieved 2015-09-26 
^ https://golangorg/LICENSE
^ Kincaid, Jason 10 November 2009 "Google's Go: A New Programming Language That's Python Meets C++" TechCrunch Retrieved 18 January 2010 
^ a b Metz, Cade 5 May 2011 "Google Go boldly goes where no code has gone before" The Register 
^ "Go FAQ: Is Google using Go internally" Retrieved 9 March 2013 
^ "Google's In-House Programming Language Now Runs on Phones" wiredcom 19 August 2015 
^ "FAQ: Implementation" golangorg 16 January 2010 Retrieved 18 January 2010 
^ "Installing GCC: Co nfiguration" Retrieved 3 December 2011 Ada, Go and Objective-C++ are not default languages 
^ "Go 15 Release Notes" Retrieved 28 January 2016 The compiler and runtime are now implemented in Go and assembler, without C 
^ Pike, Rob 28 April 2010 "Another Go at Language Design" Stanford EE Computer Systems Colloquium Stanford University  Video available
^ "Frequently Asked Questions FAQ - The Go Programming Language" golangorg Retrieved 2016-02-26 
^ Andrew Binstock 18 May 2011 "Dr Dobb's: Interview with Ken Thompson" Retrieved 7 February 2014 
^ Pike, Rob 2012 "Less is exponentially more" 
^ Robert Griesemer 2015 "The Evolution of Go" 
^ "Release History" 
^ https://golangorg/doc/go17
^ Pike, Rob "The Go Programming Language" YouTube Retrieved 1 Jul 2011 
^ Rob Pike 10 November 2009 The Go Programming Language flv Tech talk Google Event occurs at 8:53 
^ Download and install packages and dependencies - go - The Go Programming Language; see godocorg for addresses and documentation of some packages
^ "GoDoc" godocorg 
^ Rob Pike, on The Changelog podcast
^ a b c Will Yager, Why Go is not Good
^ Egon Elbre, Summary of Go Generics discussions
^ Fitzpatrick, Brad "Go: 90% Perfect, 100% of the time" Retrieved 28 January 2016 
^ Danny Gratzer, Leaving Go
^ a b Jared Forsyth, Rust vs Go
^ Janos Dobronszki, Everyday Hassles in Go
^ Rob Pike, Less is exponentially more
^ The Go Authors, Frequently Asked Questions FAQ
^ Rob Pike, Generating code
^ Richard Hudson, Go 14+ Garbage Collection GC Plan and Roadmap
^ Rob Pike, Strings, bytes, runes and characters in Go, 23 October 2013
^ a b Pike, Rob 26 September 2013 "Arrays, slices and strings: The mechanics of 'append'" The Go Blog Retrieved 7 March 2015 
^ Andrew Gerrand, Go Slices: usage and internals
^ The Go Authors, Effective Go: Slices
^ The Go authors Selectors - The Go Programming Language Specification and Calls - The Go Programming Language Specification
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ a b Schmager, Frank; Cameron, Nicholas; Noble, James 2010 GoHotDraw: evaluating the Go programming language with design patterns Evaluation and Usability of Programming Languages and Tools ACM 
^ a b Summerfield, Mark 2012 Programming in Go: Creating Applications for the 21st Century Addison-Wesley 
^ a b c d e Balbaert, Ivo 2012 The Way to Go: A Thorough Introduction to the Go Programming Language iUniverse 
^ "The Evolution of Go" talksgolangorg Retrieved 2016-03-13 
^ Diggins, Christopher 2009-11-24 "Duck Typing and the Go Programming Language" Dr Dobb's Retrieved 2016-03-10 
^ Ryer, Mat 2015-12-01 "Duck typing in Go" Retrieved 2016-03-10 
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ reflectValueOfi interface converts an interface to a reflectValue that can be further inspected
^ "Go Data Structures: Interfaces" Retrieved 15 November 2012 
^ "The Go Programming Language Specification" golangorg 
^ "A Tutorial for the Go Programming Language" The Go Programming Language Google Retrieved 10 March 2013 In Go the rule about visibility of information is simple: if a name of a top-level type, function, method, constant or variable, or of a structure field or method is capitalized, users of the package may see it Otherwise, the name and hence the thing being named is visible only inside the package in which it is declared 
^ "go - The Go Programming Language" golangorg 
^ "How to Write Go Code" golangorg The packages from the standard library are given short import paths such as "fmt" and "net/http" For your own packages, you must choose a base path that is unlikely to collide with future additions to the standard library or other external libraries If you keep your code in a source repository somewhere, then you should use the root of that source repository as your base path For instance, if you have a GitHub account at githubcom/user, that should be your base path 
^ "Go Packaging Pr oposal Process" 
^ a b Rob Pike, Concurrency is not Parallelism
^ a b c d e Chisnall, David 2012 The Go Programming Language Phrasebook Addison-Wesley 
^ "Effective Go" golangorg 
^ "Go Concurrency Patterns" golangorg 
^ John Graham-Cumming, Recycling Memory Buffers in Go
^ treego
^ Ewen Cheslack-Postava, Iterators in Go
^ Brian W Kernighan, A Descent Into Limbo
^ a b "The Go Memory Model" Google Retrieved 5 January 2011 
^ Tang, Peiyi 2010 Multi-core parallel programming in Go PDF Proc First International Conference on Advanced Computing and Communications 
^ Nanz, Sebastian; West, Scott; Soares Da Silveira, Kaue Examining the expert gap in parallel programming PDF Euro-Par 2013 CiteSeerX 10113686137 
^ Russ Cox, Off to the Races
^ Rob Pike October 25, 2012 "Go at Google: Language Design in the Service of Software Engineering" Google, Inc  "There is one important caveat: Go is not purely memory safe in the presence of concurrency"
^ "E2E: Erik Meijer and Robert Griesemer – Going Go" Channel 9 Microsoft 7 May 2012 
^ Panic And Recover, Go wiki
^ "Weekly Snapshot History" golangorg 
^ "Proposal for an exception-like mechanism" golang-nuts 25 March 2010 Retrieved 25 March 2010 
^ "Effective Go" golangorg 
^ "Effective Go" golangorg 
^ LiteIDE,
^ Erik Unger, The Case For Go
^ Andrew Gerrand, Four years of Go, The Go Blog
^ Hugues Bruant "AeroFS - A little golang way" AeroFS 
^ "Chango" GitHub 
^ John Graham-Cumming, Go at CloudFlare
^ John Graham-Cumming, What we've been doing with Go
^ "Go at CoreOS" 
^ "Couch base" GitHub 
^ Patrick Lee, Open Sourcing Our Go Libraries, 7 July 2014
^ "dlgooglecom: Powered by Go" golangorg 
^ Matt Welsh, Rewriting a Large Production System in Go
^ David Symonds, High Performance Apps on Google App Engine
^ "Mongo DB" GitHub 
^ "The Netflix Tech Blog: Application data caching using SSDs" 
^ Steven Sacks "Search & Advances" plugdj tech blog 
^ "ReplicatedHQ" GitHub 
^ Tim Jenkins "How to Convince Your Company to Go With Golang" SendGrid's Email Deliverability Blog 
^ Peter Bourgon, Go at SoundCloud
^ "Go at Google I/O and Gopher SummerFest - The Go Blog" golangorg 
^ TWSTRIKE "CoyIM" ThoughtWorks STRIKE team 
^ Rhys Hiltner, Go’s march to low-latency GC, 5 July 2016
^ "How We Built Uber Engineering's Highest Query per Second Service Using Go" Uber Engineering Blog Retrieved 2016-03-02 
^ Simionato, Michele 15 November 2009 "Interfaces vs Inheritance or, watch out for Go!" artima Retrieved 15 November 2009 
^ Astels, Dave 9 November 2009 "Ready, Set, Go!" engineyard Retrieved 9 November 2009 
^ Paul, Ryan 10 November 2009 "Go: new open source programming language from Google" Ars Technica Retrieved 13 November 2009 
^ jt "Google's Go Wins Programming Language Of The Year Award" jaxenter Retrieved 5 December 2012 
^ "TIOBE Programming Community Index for June 2015" TIOBE Software June 2015 Retrieved 5 July 2015 
^ "TIOBE Programming Community Index for September 2016" TIOBE Software September 2016 Retrieved 17 September 2016 
^ Bruce Eckel 27 August 2011 "Calling Go from Python via JSON-RPC" Retrieved 29 August 2011 
^ Hundt, Robert 2011 Loop recognition in C++/Java/Go/Scala PDF Scala Days 
^ Metz, Cade 1 July 2011 "Google Go strikes back with C++ bake-off" The Register 
^ Brownlee, John 13 November 2009 "Google didn't google "Go" before naming their programming language'" 
^ Claburn, Thomas 11 November 2009 "Google 'Go' Name Brings Accusations Of Evil'" InformationWeek Retrieved 18 January 2010 
^ "Issue 9 - go — I have already used the name for MY programming language" Google Code Google Inc Retrieved 12 October 2010 
External links
Wikimedia Commons has media related to Go programming language
Official website
A Tour of Go official
Go Programming Language Resources unofficial
Co mmunity and conferences
Gopher Academy, Gopher Academy is a group of developers working to educate and promote the Go community
Golangprojectscom, lists programming jobs and projects where companies are looking for people that know Go
GopherCon The first Go conference Denver, Colorado, USA April
Gopher Gala The first Go hackathon
GopherConIndia The first Go conference in India Bangalore Feb
GolangUK The first Go conference in UK London
dotGo European conference Paris, France
GolangShow Go audio podcast GolangShow
Golang Argentina Gophers community blog in Argentina
v
e
Programming languages
Comparison
Timeline
History
Assembly
BASIC
C
C++
C#
COBOL
Fortran
Go
Haskell
Java
JavaScript JS
Lisp
Lua
Objective-C
Pascal
Perl
PHP
Python
Ruby
Shell
Smalltalk
Swift
Visual Basic NET VBNET
more
Category
Comparison
Lists
Alphabetical
Categorical
Generational
No n-English-based
v
e
Google
Overview
Alphabet Inc
History
List of mergers and acquisitions
Products
Criticism
Privacy concerns
Censorship
Domains
Easter eggs
Don't be evil
Advertising
AdMob
Adscape
AdSense
AdWords
Analytics
Contributor
Partners
DoubleClick
DoubleClick for Publishers
Wallet
Communication
Allo
Alerts
Apps Script
Duo
Calendar
Contacts
Gmail
history
interface
Google+
Groups
Hangouts
Inbox
Sync
Text-to-Speech
Translate
Transliteration
Voice
Software
Assistant
Chrome
for Android
for iOS
Chrome Web Store
Apps
Extensions
Cloud Print
Earth
Sky
Moon
Mars
Gadgets
Gboard
Goggles
IME
Pinyin
Japanese
Photos
Keep
News & Weather
Now
OpenRefine
Search
Toolbar
Platforms
Account
Android
version history
software development
Android Auto
Android Pay
Android TV
Android Wear
Authenticator
Body
Books
Library Project
Caja
Cardboard
Cast
Chromecast
Chrome OS
Chromebit
Chromebook
Chromebox
Chrome Zone
Cloud Platform
App Engine
BigQuery
BigTable
Compute Engine
Storage
Contact Lens
Custom Search
Dart
Daydream
Earth Engine
Fit
GFS
Glass
Go
G Suite
Classroom
Home
Jamboard
Marketplace
Native Client
Nexus
OnHub
OpenSocial
Pixel
Play
Books
Games
Movies & TV
Music
Newsstand
Public DNS
Wallet
Wifi
Development
tools
AJAX APIs
App Inventor
Closure Tools
Developers
GData
Googlebot
Guava
Guice
GWS
KML
Kythe
MapReduce
Mediabot
Sitemaps
Summer of Code
Web Toolkit
Search Console
Website Optimizer
Swiffy
Publishing
Blogger
Bookmarks
Drive
Docs, Sheets, Slides, Forms
Drawings
My Maps
Fusion Tables
Domains
FeedBurner
Map Maker
Panoramio
Sites
YouTube
YouTube Instant
YouTube Red
Vevo
Zagat
Search
timeline
Appliance
Blog Search
Books
Ngram Viewer
Custom Search
Finance
Flights
Images
Maps
Mars
Moon
Sky
Street View
Coverage
Competition
Privacy concerns
News
Archive
Patents
Public Data
Scholar
Shopping
Usenet
Videos
Algorithms
PageRank
Panda
Penguin
Hummingbird
Features
Web History
Personalized
Real-Time
Instant Sear ch
SafeSearch
Voice Search
Analysis
Insights for Search
Trends
Knowledge Graph
Knowledge Vault
Discontinued
Aardvark
Answers
Browser Sync
Base
Buzz
Checkout
Chrome Frame
Click-to-Call
Cloud Connect
Code Search
Currents
Desktop
Dictionary
Directory
Dodgeball
Fast Flip
Friend Connect
Gears
GOOG-411
Google TV
Jaiku
Knol
Health
iGoogle
Image Labeler
Labs
Latitude
Lively
Mashup Editor
Notebook
Offers
Orkut
Pack
Page Creator
Picasa
Picasa Web Albums
Picnik
PowerMeter
Q & A
Reader
Script Converter
SearchWiki
Sidewiki
Slide
Squared
Talk
Updater
Urchin
Videos
Wave
Web Accelerator
People
Al Gore
Alan Eustace
Alan Mulally
Amit Singhal
Ann Mather
David Drummond
Eric Schmidt
Jeff Dean
John Doerr
John L Hennessy
Krishna Bharat
Matt Cutts
Patrick Pichette
Paul Otellini
Omid Kordestani
Rachel Whetstone
Rajen Sheth
Ram Shriram
Ray Kurzweil
Ruth Porat
Salar Kamangar
Shirley M Tilghman
Sundar Pichai
Susan Wojcicki
Urs Hölzle
Vint Cerf
Founders
Larry Page
Sergey Brin
Other
Art Project
Calico
Current
Chrome Experiments
Code-in
Code Jam
Developer Day
Google Business Groups
Made with Code
Data Liberation
Takeout
Google Developer Expert
Google for Work
Driverless car
Earth Outreach
Fiber
GV
Google China
Google Express
Googlization
Grants
Googleorg
Lunar X Prize
Project Fi
Material Design
Motorola Mobility
WiFi
X
Events
Science Fair
Searchology
I/O
Developer Day
AtGoogleTalks
Code Jam
Highly Open Participation Contest
Code-in
Projects
Ara
Loon
Tango
Sunroof
Real estate
111 Eighth Avenue
Googleplex
Logo
Doodle4Google
Google Doodles
Related
AI Challenge
Bomb
Goojje
Monopoly City Streets
Unity
Category
Portal
v
e
Rob Pike
Operating systems
Plan 9 from Bell Labs
Inferno
Programming languages
Newsqueak
Limbo
Go
Sawzall
Software
acme
Blit
sam
rio

Publications
The Practice of Programming
The Unix Programming Environment
Other
Renée French
Mark V Shaney
UTF-8
v
e
Ken Thompson
Operating systems
Unix
Plan 9 from Bell Labs
Programming languages
B
Bon
Go
Software
Belle
ed
grep
sam
Space Travel
Thompson shell
Other
UTF-8


Go (programming language)

Random Posts

Picts

Picts

The Picts were a tribal confederation of peoples who lived in what is today eastern and northern Sco...
Visual prosthesis

Visual prosthesis

A visual prosthesis, often referred to as a bionic eye, is an experimental visual device intended to...
Mini rugby

Mini rugby

Mini rugby, also known as New Image Rugby, is a form of rugby union designed to introduce the sport ...
List of synthetic polymers

List of synthetic polymers

Synthetic polymers are human-made polymers From the utility point of view they can be classified int...