Loading AI tools
мова програмування З Вікіпедії, вільної енциклопедії
Go — компільована мова програмування із вбудованими засобами для паралельних обчислень і засобами віддаленого керування пакунками. Цю мову програмування розробив Google[2] як частину проєкту з розробки операційної системи Inferno.[джерело?] Початкова розробка Go почалася у вересні 2007 року, а безпосередньо проєктували її Роберт Гризмер, Роб Пайк і Кен Томпсон[3]. Офіційно мову представили у листопаді 2009 року.
Go | |
---|---|
![]() | |
Парадигма | компільована, багатониткова, імперативна, структурована |
Дата появи | 2009 |
Творці | Роберт Гризмер, Роб Пайк і Кен Томпсон |
Розробник | |
Останній реліз | 1.20 (1 лютого, 2023 ) |
Система типізації | сувора статична |
Основні реалізації | gc (8g, 6g, 5g), gccgo |
Під впливом від | С, Pascal / Modula / Oberon, CSP / Newsqueak / Limbo[1] |
Операційна система | NetBSD, OpenBSD, FreeBSD, Linux, Mac OS X, Windows, Android |
Ліцензія | BSD |
Звичайні розширення файлів | .go |
Вебсайт | golang.org |
Підтримка мови здійснюється для операційних систем Linux, Android[4], Mac OS X та Windows[5].
Метою створення проєкту Go було бажання отримати мову, що поєднує високу продуктивність компільованих мов з легкістю написання коду, швидкістю розробки і захищеністю від помилок, властивих скриптовим мовам. Синтаксис Go базується на звичних елементах мови Сі з окремими запозиченнями з мови Python. Мова досить лаконічна, але при цьому код залишається легким для читання і сприйняття. Проєкт від початку розробляється з оглядкою на багатониткове програмування та ефективну роботу на багатоядерних системах, в тому числі надаючи реалізовані на рівні операторів засоби для організації паралельних обчислень та взаємодії між паралельно виконуваними методами.
Мова надає вбудовані засоби захисту від виходу за допустимі області виділених блоків пам'яті і забезпечує можливість використання збирача сміття. При цьому код мовою Go компілюється у відокремлені бінарні виконувані файли, що виконуються нативно без використання віртуальної машини (модулі профілювання, зневадження та інші підсистеми виявлення проблем на етапі виконання інтегруються у вигляді runtime-компонентів), що дозволяє домогтися продуктивності порівнянної з програмами на мові Сі .
Синтаксис Go дуже схожий на синтаксис С: блоки коду в фігурних дужках; загальна структура керування виконанням програми включає for, switch та if. На відміну від C, крапка з комою в кінці рядка не є обов'язковою; оголошення змінних відбувається по-іншому; перетворення типів строге; нові інструкції go та select було введено для підтримки паралельного програмування. Нові вбудовані типи включають хеш-таблиці, рядки Unicode, slices-масиви та канали для передачі даних між нитками.
Go спроєктований для швидкого компілювання, навіть на застарілому обладнанні.[6] Ця мова підтримує прибирання сміття. Чітка паралельно-орієнтована структура Go (канали є альтернативою каналам вводу даних) запозичені з Communicating Sequential Processes Тоні Гоара. На відміну попередніх паралельно-орієнтованих мов програмування, таким як occam чи Limbo, Go не надає будь-якої вбудованої підтримки попереджень безпеки чи перевірки паралельності.[7] На сьогодні Go не має ніякої вбудованої підтримки шаблонів, але це може бути додано в майбутньому.[8]
З функцій, доступних в C++ або Java, Go не включає в себе успадкування типів, узагальнене (шаблонне) програмування, твердження (assert), перевизначення методів, арифметичні операції над вказівниками.[3] Автори Go підкреслюють відкритість шаблонному програмуванню, явно виступають проти асертів та арифметичних операцій над вказівниками, у той час схильні дозволити успадкування типів для більшої зручності мови.[3] Спочатку мова не включала обробку винятків, але в березні 2010 було реалізовано механізм, відомий як panic
/recover
для обробки помилок і винятків, для уникнення проблем з винятками, з якими зіткнулись автори.[9][10]
Видимість функцій за межами файлу, де вони визначені, визначається неявно за капіталізацією їхніх ідентифікаторів, на відміну від C++, де використовується ключове слово public
.[11]
Go надає goroutines, маленькі легкі нитки (ім'я співзвучне з coroutine (співпрограма) в англійській мові). "Goroutine" створюються командою go
з анонімних чи звичайних функцій. "Goroutine" виконуються в паралель між собою, включно з функцією, яка їх викликала. Їм немає потреби запускатися в окремих нитках, але їхні групи збираються в декілька ниток — передавання керування між ними здійснюється блокуванням їх при отриманні чи передаванні повідомлень через канали.
На цей час існує два компілятори Go. Перший 6g/8g/5g (компіляція для AMD64, x86, та ARM відповідно) та підручні засоби відомі як 'gc', що базуються на попередній роботі Кена Томпсона над Plan 9's C toolchain. А також gccgo, фронтенд для GCC написаний на C++.[12]
Обидва компілятори працюють на Unix-подібних системах, порт для Microsoft Windows для gc було додано в основний пакет, більшість стандартних бібліотек також вже працюють під Windows.
Також існує 'tiny' середовище виконання, що дозволяє програмам на Go працювати на "голому залізі".
Класичний приклад програми "Hello world!" на Go:
package main
import "fmt"
func main() {
fmt.Println("Привіт, світе!")
}
Автоматичне вставновлення крапки з комою в Go потребує дотримання певного стилю кодування: відкриті лапки не повинні розміщуватись на окремих рядках, тому доречно використовувати так званий brace style; Дивіться приклад.[13]
Приклад Go програми на зразок команди Unix echo:[14]
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 змінити назву мови для запобігання конфліктові з назвою його мови програмування.[15] Попри те що McCabe не має торгової марки на назву, дехто з коментаторів закликав Google у відповідь на запит McCabe змінити назву. Це питання було закрите 12 жовтня 2010 з статусом "Unfortunate" (невдалий), розробник з Google прокоментував закриття як "Існує багато комп'ютерних продуктів та сервісів з найменуванням Go. За 11 місяців із нашого релізу була мінімальна кількість випадків зі сплутуванням цих двох мов".[16]
Go увійшла в TIOBE Programming Community Index[17] на 15 місце в свій перший рік, посунувши усталені мови, такі як Pascal. На 14 липня 2017, вона займає 10-ту сходинку індексу.
На Go написано багато відкритого програмного забезпечення:[18]
![]() | Цей розділ потребує доповнення. (березень 2019) |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.