Мова Програмування Go: мова програмування

Go — компільована мова програмування із вбудованими засобами для паралельних обчислень і засобами віддаленого керування пакунками.

Цю мову програмування розробив Google як частину проєкту з розробки операційної системи Inferno.[джерело?] Початкова розробка Go почалася у вересні 2007 року, а безпосередньо проєктували її Роберт Гризмер, Роб Пайк і Кен Томпсон. Офіційно мову представили у листопаді 2009 року.

Go
Мова Програмування Go: Опис, Реалізація, Приклад
Парадигма компільована, багатониткова, імперативна, структурована
Дата появи 2009
Творці Роберт Гризмер, Роб Пайк і Кен Томпсон
Розробник Google
Останній реліз 1.20 (1 лютого, 2023; 14 місяців тому (2023-02-01))
Система типізації сувора статична
Основні реалізації 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 не має ніякої вбудованої підтримки шаблонів, але це може бути додано в майбутньому.

З функцій, доступних в C++ або 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 потребує дотримання певного стилю кодування: відкриті лапки не повинні розміщуватись на окремих рядках, тому доречно використовувати так званий brace style; Дивіться приклад.

Приклад 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, розробник мови програмування Go![en], попросив Google змінити назву мови для запобігання конфліктові з назвою його мови програмування. Попри те що McCabe не має торгової марки на назву, дехто з коментаторів закликав Google у відповідь на запит McCabe змінити назву. Це питання було закрите 12 жовтня 2010 з статусом "Unfortunate" (невдалий), розробник з Google прокоментував закриття як "Існує багато комп'ютерних продуктів та сервісів з найменуванням Go. За 11 місяців із нашого релізу була мінімальна кількість випадків зі сплутуванням цих двох мов".

Популярність

Go увійшла в TIOBE Programming Community Index на 15 місце в свій перший рік, посунувши усталені мови, такі як Pascal. На 14 липня 2017, вона займає 10-ту сходинку індексу.

Застосування

На Go написано багато відкритого програмного забезпечення:

  • Caddy[en], HTTP/2 сервер з автоматичною підтримкою HTTPS.
  • Docker, інструментарій для роботи з контейнерами Linux
  • Hugo, генератор статичних сайтів
  • InfluxDB, високопродуктивна база даних часових рядів.
  • Kubernetes, система керування контейнерами

Примітки

Посилання

Tags:

Мова Програмування Go ОписМова Програмування Go РеалізаціяМова Програмування Go ПрикладМова Програмування Go Конфуз з назвоюМова Програмування Go ПопулярністьМова Програмування Go ЗастосуванняМова Програмування Go ПриміткиМова Програмування Go ПосиланняМова Програмування GoGoogleInferno (операційна система)Вікіпедія:Посилання на джерелаКен ТомпсонКомпільована мова програмуванняМова програмуванняПаралельні обчислення

🔥 Trending searches on Wiki Українська:

Антитерористична операція на сході УкраїниПласт (організація)Октавіан АвгустШевченко Андрій МиколайовичŠkoda OctaviaАмстердамРосійсько-українська війна (з 2014)СонцеБолгаріяМісяць (супутник)КатарсисСписок абревіатур і скорочень з військової справиФерруччо ЛамборгініСписок країн Європейського СоюзуІспанія110-та окрема механізована бригада (Україна)Кіровоградська областьКримінальний кодекс УкраїниВтрати силових структур внаслідок російського вторгнення в Україну (січень 2023)Кримське ханствоЛуцькГолодні ігри (фільм)ДунайБілкиОперація «Вісла»ЄгипетСвітан Роман ГригоровичІван МазепаОперативне командування «Північ»Україна (назва)Слобоженко Олександр ОлександровичЧемпіонат світу з хокею із шайбою 2023 (дивізіон I)Піддубний Іван МаксимовичГвардія наступуУННВДжекі ЧанСуббота Спартак ОлександровичУкраїнські прізвищаДніпро (місто)КіпрАлбаніяКульбабаРезніков Олексій ЮрійовичПівнічна КореяДженніфер ЛоренсТимчасово окуповані території УкраїниЦілі сталого розвиткуСоюз Радянських Соціалістичних РеспублікУма Турман129-та окрема бригада територіальної оборони (Україна)ПВК ВагнераГрузіяАК-74Шизофренія1 травняЕстоніяРеєстраційний номер облікової картки платника податківВолинська трагедіяМальтаГрушевський Михайло СергійовичРимська імперія28-ма окрема механізована бригада (Україна)УкраїнціГреціяПоділляПутін Володимир ВолодимировичРозпад СРСР54-та окрема механізована бригада (Україна)Дженна ОртегаСкрябін (гурт)Вінстон ЧерчилльTelegramСліпакТхір степовийМолдоваСписок союзних республік СРСРСписок президентів України🡆 More