Go — компільована мова програмування із вбудованими засобами для паралельних обчислень і засобами віддаленого керування пакунками. Цю мову програмування розробив Google як частину проєкту з розробки операційної системи Inferno.[] Початкова розробка Go почалася у вересні 2007 року, а безпосередньо проєктували її , і Кен Томпсон. Офіційно мову представили у листопаді 2009 року.
Go | |
---|---|
Парадигма | компільована, багатониткова, імперативна, структурована |
Дата появи | 2009 |
Творці | , і Кен Томпсон |
Розробник | |
Останній реліз | 1.20 (1 лютого, 2023 ) |
Система типізації | сувора статична |
Основні реалізації | gc (8g, 6g, 5g), gccgo |
Під впливом від | С, Pascal / Modula / Oberon, CSP / Newsqueak / Limbo |
Операційна система | NetBSD, OpenBSD, FreeBSD, Linux, Mac OS X, Windows, Android |
Ліцензія | BSD |
Звичайні розширення файлів | .go |
Вебсайт | golang.org |
|
Підтримка мови здійснюється для операційних систем Linux, Android, Mac OS X та Windows.
Опис
Метою створення проєкту Go було бажання отримати мову, що поєднує високу продуктивність компільованих мов з легкістю написання коду, швидкістю розробки і захищеністю від помилок, властивих скриптовим мовам. Синтаксис Go базується на звичних елементах мови Сі з окремими запозиченнями з мови Python. Мова досить лаконічна, але при цьому код залишається легким для читання і сприйняття. Проєкт від початку розробляється з оглядкою на багатониткове програмування та ефективну роботу на багатоядерних системах, в тому числі надаючи реалізовані на рівні операторів засоби для організації паралельних обчислень та взаємодії між паралельно виконуваними методами.
Мова надає вбудовані засоби захисту від виходу за допустимі області виділених блоків пам'яті і забезпечує можливість використання збирача сміття. При цьому код мовою Go компілюється у відокремлені бінарні виконувані файли, що виконуються нативно без використання віртуальної машини (модулі профілювання, зневадження та інші підсистеми виявлення проблем на етапі виконання інтегруються у вигляді runtime-компонентів), що дозволяє домогтися продуктивності порівнянної з програмами на мові Сі .
Синтаксис Go дуже схожий на синтаксис С: блоки коду в фігурних дужках; загальна структура керування виконанням програми включає for, switch та if. На відміну від C, крапка з комою в кінці рядка не є обов'язковою; оголошення змінних відбувається по-іншому; перетворення типів строге; нові інструкції go та select було введено для підтримки паралельного програмування. Нові вбудовані типи включають хеш-таблиці, рядки Unicode, slices-масиви та канали для передачі даних між нитками.
Go спроєктований для швидкого компілювання, навіть на застарілому обладнанні. Ця мова підтримує прибирання сміття. Чітка паралельно-орієнтована структура Go (канали є альтернативою каналам вводу даних) запозичені з Communicating Sequential Processes Тоні Гоара. На відміну попередніх паралельно-орієнтованих мов програмування, таким як occam чи Limbo, Go не надає будь-якої вбудованої підтримки попереджень безпеки чи перевірки паралельності. На сьогодні Go не має ніякої вбудованої підтримки шаблонів, але це може бути додано в майбутньому.
З функцій, доступних в або Java, Go не включає в себе успадкування типів, узагальнене (шаблонне) програмування, твердження (assert), перевизначення методів, арифметичні операції над вказівниками. Автори Go підкреслюють відкритість шаблонному програмуванню, явно виступають проти асертів та арифметичних операцій над вказівниками, у той час схильні дозволити успадкування типів для більшої зручності мови. Спочатку мова не включала обробку винятків, але в березні 2010 було реалізовано механізм, відомий як panic
/recover
для обробки помилок і винятків, для уникнення проблем з винятками, з якими зіткнулись автори.
Видимість функцій за межами файлу, де вони визначені, визначається неявно за капіталізацією їхніх ідентифікаторів, на відміну від C++, де використовується ключове слово public
.
Паралельність
Go надає goroutines, маленькі легкі нитки (ім'я співзвучне з coroutine (співпрограма) в англійській мові). "Goroutine" створюються командою go
з анонімних чи звичайних функцій. "Goroutine" виконуються в паралель між собою, включно з функцією, яка їх викликала. Їм немає потреби запускатися в окремих нитках, але їхні групи збираються в декілька ниток — передавання керування між ними здійснюється блокуванням їх при отриманні чи передаванні повідомлень через канали.
Реалізація
На цей час існує два компілятори Go. Перший 6g/8g/5g (компіляція для AMD64, x86, та ARM відповідно) та підручні засоби відомі як 'gc', що базуються на попередній роботі Кена Томпсона над Plan 9's C toolchain. А також gccgo, фронтенд для GCC написаний на C++.
Обидва компілятори працюють на Unix-подібних системах, порт для Microsoft Windows для gc було додано в основний пакет, більшість стандартних бібліотек також вже працюють під Windows.
Також існує 'tiny' середовище виконання, що дозволяє програмам на Go працювати на "голому залізі".
Приклад
Класичний приклад програми "Hello world!" на Go:
package main import "fmt" func main() { fmt.Println("Привіт, світе!") }
Автоматичне вставновлення крапки з комою в Go потребує дотримання певного стилю кодування: відкриті лапки не повинні розміщуватись на окремих рядках, тому доречно використовувати так званий ; Дивіться приклад.
Приклад Go програми на зразок команди Unix echo:
package main import ( "os" "flag" // парсер командного рядка ) var omitNewline = flag.Bool("n", false, "Не друкувати фінальний перенос рядка") const ( Space = " " Newline = "\n" ) func main() { flag.Parse() // Сканує командний рядок та встановлює прапорець var s string = "" for i := 0; i < flag.NArg(); i++ { if i > 0 { s += Space } s += flag.Arg(i) } if !*omitNewline { s += Newline } os.Stdout.WriteString(s) }
Конфуз з назвою
В день офіційного релізу Go Francis McCabe, розробник мови програмування [en], попросив Google змінити назву мови для запобігання конфліктові з назвою його мови програмування. Попри те що McCabe не має торгової марки на назву, дехто з коментаторів закликав Google у відповідь на запит McCabe змінити назву. Це питання було закрите 12 жовтня 2010 з статусом "Unfortunate" (невдалий), розробник з Google прокоментував закриття як "Існує багато комп'ютерних продуктів та сервісів з найменуванням Go. За 11 місяців із нашого релізу була мінімальна кількість випадків зі сплутуванням цих двох мов".
Популярність
Go увійшла в TIOBE Programming Community Index на 15 місце в свій перший рік, посунувши усталені мови, такі як Pascal. На 14 липня 2017, вона займає 10-ту сходинку індексу.
Застосування
На Go написано багато відкритого програмного забезпечення:
- [en], (HTTP/2) сервер з автоматичною підтримкою HTTPS.
- Docker, інструментарій для роботи з контейнерами Linux
- , генератор статичних сайтів
- InfluxDB, високопродуктивна база даних часових рядів.
- Kubernetes, система керування контейнерами
Цей розділ потребує доповнення. (березень 2019) |
Примітки
- . Архів оригіналу за 3 травня 2020. Процитовано 3 травня 2018.
- . Архів оригіналу за 7 січня 2019. Процитовано 13 жовтня 2010.
- . Архів оригіналу за 18 серпня 2010. Процитовано 13 жовтня 2010.
- http://blog.golang.org/go1.4 [ 11 грудня 2014 у Wayback Machine.]: The most notable new feature in this release is official support for Android.
- . Архів оригіналу за 20 березня 2012. Процитовано 13 жовтня 2010.
- (10 листопада 2009). The Go Programming Language (flv) (Tech talk). Google. Подія сталася на 8:53.
- . Google. 23 Februari 2010. Архів оригіналу за 23 листопада 2010. Процитовано 13 жовтня 2010.
- Дискусія про шаблони в Go, golang-nuts, 18 Dec 2009
- . Архів оригіналу за 3 вересня 2010. Процитовано 13 жовтня 2010.
- . golang-nuts. 25 березня 2010. Архів оригіналу за 17 травня 2011. Процитовано 25 березня 2010.
- A Tutorial for the Go Programming Language. The Go Programming Language. Google. Архів оригіналу за 8 липня 2013. Процитовано 10 березня 2010.
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.
- FAQ: Реалізація. golang.org. 16 січня 2010. Архів оригіналу за 8 липня 2013. Процитовано 18 січня 2010.
- A Tutorial for the Go Programming Language. The Go Programming Language. Google. Архів оригіналу за 8 липня 2013. Процитовано 10 березня 2010.
The one surprise is that it's important to put the opening brace of a construct such as an if statement on the same line as the if; however, if you don't, there are situations that may not compile or may give the wrong result. The language forces the brace style to some extent.
- A Tutorial for the Go Programming Language. golang.org. 16 січня 2010. Архів оригіналу за 8 липня 2013. Процитовано 18 січня 2010.
- Claburn, Thomas (11 листопада 2009). . InformationWeek. Архів оригіналу за 22 липня 2010. Процитовано 18 січня 2010.
- Issue 9 - go - I have already used the name for *MY* programming language. Google Code. Google Inc. Архів оригіналу за 8 липня 2013. Процитовано 12 жовтня 2010.
- TIOBE Programming Community Index. Архів оригіналу за 22 червня 2013. Процитовано 13 жовтня 2010.
- , архів оригіналу за 6 грудня 2017, процитовано 10 січня 2018
Посилання
- Тур мовою програмування Go [ 11 квітня 2018 у Wayback Machine.] (укр.)
- Go Programming Language Homepage [ 9 липня 2011 у Wayback Machine.]
- Another Go at Language Design [ 12 червня 2014 у Wayback Machine.] — lecture given by Go's language author, Rob Pike at Stanford University (video archive).
- Unofficial Go Language resource site [ 2 травня 2010 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Go kompilovana mova programuvannya iz vbudovanimi zasobami dlya paralelnih obchislen i zasobami viddalenogo keruvannya pakunkami Cyu movu programuvannya rozrobiv Google yak chastinu proyektu z rozrobki operacijnoyi sistemi Inferno dzherelo Pochatkova rozrobka Go pochalasya u veresni 2007 roku a bezposeredno proyektuvali yiyi i Ken Tompson Oficijno movu predstavili u listopadi 2009 roku GoParadigma kompilovana bagatonitkova imperativna strukturovanaData poyavi 2009Tvorci i Ken TompsonRozrobnik GoogleOstannij reliz 1 20 1 lyutogo 2023 16 misyaciv tomu 2023 02 01 Sistema tipizaciyi suvora statichnaOsnovni realizaciyi gc 8g 6g 5g gccgoPid vplivom vid S Pascal Modula Oberon CSP Newsqueak LimboOperacijna sistema NetBSD OpenBSD FreeBSD Linux Mac OS X Windows AndroidLicenziya BSDZvichajni rozshirennya fajliv goVebsajt golang org Instrukciyi u Vikipidruchniku Mediafajli u Vikishovishi Pidtrimka movi zdijsnyuyetsya dlya operacijnih sistem Linux Android Mac OS X ta Windows OpisMetoyu stvorennya proyektu Go bulo bazhannya otrimati movu sho poyednuye visoku produktivnist kompilovanih mov z legkistyu napisannya kodu shvidkistyu rozrobki i zahishenistyu vid pomilok vlastivih skriptovim movam Sintaksis Go bazuyetsya na zvichnih elementah movi Si z okremimi zapozichennyami z movi Python Mova dosit lakonichna ale pri comu kod zalishayetsya legkim dlya chitannya i sprijnyattya Proyekt vid pochatku rozroblyayetsya z oglyadkoyu na bagatonitkove programuvannya ta efektivnu robotu na bagatoyadernih sistemah v tomu chisli nadayuchi realizovani na rivni operatoriv zasobi dlya organizaciyi paralelnih obchislen ta vzayemodiyi mizh paralelno vikonuvanimi metodami Mova nadaye vbudovani zasobi zahistu vid vihodu za dopustimi oblasti vidilenih blokiv pam yati i zabezpechuye mozhlivist vikoristannya zbiracha smittya Pri comu kod movoyu Go kompilyuyetsya u vidokremleni binarni vikonuvani fajli sho vikonuyutsya nativno bez vikoristannya virtualnoyi mashini moduli profilyuvannya znevadzhennya ta inshi pidsistemi viyavlennya problem na etapi vikonannya integruyutsya u viglyadi runtime komponentiv sho dozvolyaye domogtisya produktivnosti porivnyannoyi z programami na movi Si Sintaksis Go duzhe shozhij na sintaksis S bloki kodu v figurnih duzhkah zagalna struktura keruvannya vikonannyam programi vklyuchaye for switch ta if Na vidminu vid C krapka z komoyu v kinci ryadka ne ye obov yazkovoyu ogoloshennya zminnih vidbuvayetsya po inshomu peretvorennya tipiv stroge novi instrukciyi go ta select bulo vvedeno dlya pidtrimki paralelnogo programuvannya Novi vbudovani tipi vklyuchayut hesh tablici ryadki Unicode slices masivi ta kanali dlya peredachi danih mizh nitkami Go sproyektovanij dlya shvidkogo kompilyuvannya navit na zastarilomu obladnanni Cya mova pidtrimuye pribirannya smittya Chitka paralelno oriyentovana struktura Go kanali ye alternativoyu kanalam vvodu danih zapozicheni z Communicating Sequential Processes Toni Goara Na vidminu poperednih paralelno oriyentovanih mov programuvannya takim yak occam chi Limbo Go ne nadaye bud yakoyi vbudovanoyi pidtrimki poperedzhen bezpeki chi perevirki paralelnosti Na sogodni Go ne maye niyakoyi vbudovanoyi pidtrimki shabloniv ale ce mozhe buti dodano v majbutnomu Z funkcij dostupnih v C abo Java Go ne vklyuchaye v sebe uspadkuvannya tipiv uzagalnene shablonne programuvannya tverdzhennya assert pereviznachennya metodiv arifmetichni operaciyi nad vkazivnikami Avtori Go pidkreslyuyut vidkritist shablonnomu programuvannyu yavno vistupayut proti asertiv ta arifmetichnih operacij nad vkazivnikami u toj chas shilni dozvoliti uspadkuvannya tipiv dlya bilshoyi zruchnosti movi Spochatku mova ne vklyuchala obrobku vinyatkiv ale v berezni 2010 bulo realizovano mehanizm vidomij yak panic recover dlya obrobki pomilok i vinyatkiv dlya uniknennya problem z vinyatkami z yakimi zitknulis avtori Vidimist funkcij za mezhami fajlu de voni viznacheni viznachayetsya neyavno za kapitalizaciyeyu yihnih identifikatoriv na vidminu vid C de vikoristovuyetsya klyuchove slovo public Paralelnist Go nadaye goroutines malenki legki nitki im ya spivzvuchne z coroutine spivprograma v anglijskij movi Goroutine stvoryuyutsya komandoyu go z anonimnih chi zvichajnih funkcij Goroutine vikonuyutsya v paralel mizh soboyu vklyuchno z funkciyeyu yaka yih viklikala Yim nemaye potrebi zapuskatisya v okremih nitkah ale yihni grupi zbirayutsya v dekilka nitok peredavannya keruvannya mizh nimi zdijsnyuyetsya blokuvannyam yih pri otrimanni chi peredavanni povidomlen cherez kanali RealizaciyaNa cej chas isnuye dva kompilyatori Go Pershij 6g 8g 5g kompilyaciya dlya AMD64 x86 ta ARM vidpovidno ta pidruchni zasobi vidomi yak gc sho bazuyutsya na poperednij roboti Kena Tompsona nad Plan 9 s C toolchain A takozh gccgo frontend dlya GCC napisanij na C Obidva kompilyatori pracyuyut na Unix podibnih sistemah port dlya Microsoft Windows dlya gc bulo dodano v osnovnij paket bilshist standartnih bibliotek takozh vzhe pracyuyut pid Windows Takozh isnuye tiny seredovishe vikonannya sho dozvolyaye programam na Go pracyuvati na golomu zalizi PrikladKlasichnij priklad programi Hello world na Go package main import fmt func main fmt Println Privit svite Avtomatichne vstavnovlennya krapki z komoyu v Go potrebuye dotrimannya pevnogo stilyu koduvannya vidkriti lapki ne povinni rozmishuvatis na okremih ryadkah tomu dorechno vikoristovuvati tak zvanij Divitsya priklad Priklad Go programi na zrazok komandi Unix echo package main import os flag parser komandnogo ryadka var omitNewline flag Bool n false Ne drukuvati finalnij perenos ryadka const Space Newline n func main flag Parse Skanuye komandnij ryadok ta vstanovlyuye praporec var s string for i 0 i lt flag NArg i if i gt 0 s Space s flag Arg i if omitNewline s Newline os Stdout WriteString s Konfuz z nazvoyuV den oficijnogo relizu Go Francis McCabe rozrobnik movi programuvannya en poprosiv Google zminiti nazvu movi dlya zapobigannya konfliktovi z nazvoyu jogo movi programuvannya Popri te sho McCabe ne maye torgovoyi marki na nazvu dehto z komentatoriv zaklikav Google u vidpovid na zapit McCabe zminiti nazvu Ce pitannya bulo zakrite 12 zhovtnya 2010 z statusom Unfortunate nevdalij rozrobnik z Google prokomentuvav zakrittya yak Isnuye bagato komp yuternih produktiv ta servisiv z najmenuvannyam Go Za 11 misyaciv iz nashogo relizu bula minimalna kilkist vipadkiv zi splutuvannyam cih dvoh mov PopulyarnistGo uvijshla v TIOBE Programming Community Index na 15 misce v svij pershij rik posunuvshi ustaleni movi taki yak Pascal Na 14 lipnya 2017 vona zajmaye 10 tu shodinku indeksu ZastosuvannyaNa Go napisano bagato vidkritogo programnogo zabezpechennya en HTTP 2 server z avtomatichnoyu pidtrimkoyu HTTPS Docker instrumentarij dlya roboti z kontejnerami Linux generator statichnih sajtiv InfluxDB visokoproduktivna baza danih chasovih ryadiv Kubernetes sistema keruvannya kontejnerami Cej rozdil potrebuye dopovnennya berezen 2019 Primitki Arhiv originalu za 3 travnya 2020 Procitovano 3 travnya 2018 Arhiv originalu za 7 sichnya 2019 Procitovano 13 zhovtnya 2010 Arhiv originalu za 18 serpnya 2010 Procitovano 13 zhovtnya 2010 http blog golang org go1 4 11 grudnya 2014 u Wayback Machine The most notable new feature in this release is official support for Android Arhiv originalu za 20 bereznya 2012 Procitovano 13 zhovtnya 2010 10 listopada 2009 The Go Programming Language flv Tech talk Google Podiya stalasya na 8 53 Google 23 Februari 2010 Arhiv originalu za 23 listopada 2010 Procitovano 13 zhovtnya 2010 Diskusiya pro shabloni v Go golang nuts 18 Dec 2009 Arhiv originalu za 3 veresnya 2010 Procitovano 13 zhovtnya 2010 golang nuts 25 bereznya 2010 Arhiv originalu za 17 travnya 2011 Procitovano 25 bereznya 2010 A Tutorial for the Go Programming Language The Go Programming Language Google Arhiv originalu za 8 lipnya 2013 Procitovano 10 bereznya 2010 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 FAQ Realizaciya golang org 16 sichnya 2010 Arhiv originalu za 8 lipnya 2013 Procitovano 18 sichnya 2010 A Tutorial for the Go Programming Language The Go Programming Language Google Arhiv originalu za 8 lipnya 2013 Procitovano 10 bereznya 2010 The one surprise is that it s important to put the opening brace of a construct such as an if statement on the same line as the if however if you don t there are situations that may not compile or may give the wrong result The language forces the brace style to some extent A Tutorial for the Go Programming Language golang org 16 sichnya 2010 Arhiv originalu za 8 lipnya 2013 Procitovano 18 sichnya 2010 Claburn Thomas 11 listopada 2009 InformationWeek Arhiv originalu za 22 lipnya 2010 Procitovano 18 sichnya 2010 Issue 9 go I have already used the name for MY programming language Google Code Google Inc Arhiv originalu za 8 lipnya 2013 Procitovano 12 zhovtnya 2010 TIOBE Programming Community Index Arhiv originalu za 22 chervnya 2013 Procitovano 13 zhovtnya 2010 arhiv originalu za 6 grudnya 2017 procitovano 10 sichnya 2018PosilannyaTur movoyu programuvannya Go 11 kvitnya 2018 u Wayback Machine ukr Go Programming Language Homepage 9 lipnya 2011 u Wayback Machine Another Go at Language Design 12 chervnya 2014 u Wayback Machine lecture given by Go s language author Rob Pike at Stanford University video archive Unofficial Go Language resource site 2 travnya 2010 u Wayback Machine