Go (програмски језик) — разлика између измена

Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м Разне исправке; козметичке измене
Нема описа измене
Ред 9:
|настанак = {{start date and age|2009|11|10}}
|аутори = -{[[Google Inc.]]}-, доприносиоци из заједнице [[отворени код|отвореног кода]]
|дизајнери = Роберт Грисемер<br />Роб Пајк<br />[[Кен Томпсон]]
|актуелна верзија = 1.6
|датум актуелне верзије = {{start date and age|2016|02|17}}
Ред 23:
}}
 
'''Гоу''' ({{јез-енгл|Go}}) је [[програмски језик]] [[отворени код|отвореног кода]] настао у [[Гугл]]у 2007. године. Језик су осмислили Роберт Грисемер, Роб Пајк и [[Кен Томпсон]], а намењен је првенствено [[системско програмирање|системском програмирању]]. Ослањајући се на традицију језика [[C (програмски језик)|C]] и [[Паскал (програмски језик)|Паскал]], језик је компилиран, са статичким типовима података, ограниченим структурним типовима, садржи аутоматско управљање меморијом и функционалности за конкурентно програмирање инспирисане [[комуницирајући секвенцијални процеси|комуницирајућим секвенцијалним процесима]].
'''Гоу''' ({{јез-енгл|Go}}) је [[Императивно програмирање|императивни]] [[програмски језик]] чија је основна намена [[системско програмирање]]. Подржава [[конкурентно програмирање]] кроз креирање процеса (нити) који могу међу собом да комуницирају на безбедан начин.
 
Почетак рада на језику је септембар [[2007|2007.]] године. Званично је промовисан новембра [[2009|2009.]] године под [[BSD licence|модификованом -{''BSD''}- лиценцом]]. Данас се користи за мрежне програме, најпре у оквиру Гуглових система. Постоје две главне имплементације језика: ''gc'', који је главна имплементација коју је развио Гугл и ''gccgo'' из [[ГНУ колекција компајлера|ГНУ колекције компајлера]]. До верзије 1.5, gc имплементација је била написана у мешавини C, [[асемблер]] и Гоу кода, а од верзије 1.5, C код је преведен у Гоу.
Меморију користи на безбедан начин. Уграђени механизми онемогућавају приступ меморији ван предвиђене области. Језик се ослања на систем за аутоматско сакупљање и ослобађање некоришћене меморије.
 
Почетак рада на језику је септембар [[2007]]. године. Његови првобитни творци су Робет Грисемер, Роб Пајк и [[Кен Томпсон]]. Језик је првобитно настао као експеримент запослених у оквиру [[Гугл]] корпорације. Званично је промовисан новембра [[2009]]. године под [[BSD licence|модификованом -{''BSD''}- лиценцом]].
 
== Историја ==
Линија 51 ⟶ 49:
** Једноставно управљање пакетима (<code>go get</code>), као и једноставна и читљива документација пакета на интернету.
* Јединствени приступи проблемима:
** Уграђене функционалности за [[конкурентно програмирање]]: лаки процеси (корутине - -{goroutines}-), канали за ток података између процеса, и <code>select</code> кључна реч за управљање каналима.
** Систем интерфејса и уграђивања типова уместо уместо виртуалног и невиртуалног наслеђивања.
** Скуп алата који производи статички линковане извршне датотеке које не зависе од спољашњих библиотека.
Линија 182 ⟶ 180:
 
Сваки пакет је дефинисан са два податка: својом путањом (нпр. <code>"compress/bzip2"</code> или <code>"golang.org/x/net/html"</code>) и својим именом (нпр. <code>bzip2</code> или <code>html</code>). Путања пакета је ниска, па може имати било какав садржај; пакети које корисници објављују на интернету садрже [[URL|адресу]] са које пакет може бити преузет, чиме је олакшано управљање пакетима. Позив на други пакет увек садржи и име тог пакета, а да би нека вредност из пакета била видљива, њено мора почињати великим словом (нпр. функција <code>Printf</code> из пакета <code>fmt</code> је видљива у свим другим пакетима који позивају тај пакет, док је функција <code>printf</code> видљива само у оквиру <code>fmt</code> пакета).
 
 
 
=== Конкурентно програмирање ===
Линија 248 ⟶ 244:
=== Конкурентан пример ===
 
Следећи програм показује употребу конкурентних особина за писање асинхроних програма. Програм покреће две горутне: једна чека да корисник упише неки текст, а друга шаље сигнал након пет секунди. <code>select</code> гранање чека да било која од горутина достави поруку функцији <code>main</code>, и извршава се зависно од прве вредности која је стигла (пример адаптиран из књиге Давида Чизнала).<ref name="phrasebook">{{cite book |title=The Go Programming Language Phrasebook |first=Давид |last=Чизнал |publisher=Addison-Wesley |year=2012 |url=https://books.google.com/books?id=scyH562VXZUC}}</ref>{{rp|152}}
== Корисници и прихватање ==
 
<source lang="go">
package main
 
import (
"fmt"
"time"
)
 
func readword(ch chan string) {
fmt.Println("Упиши реч и притисни Enter.")
var word string
fmt.Scanf("%s", &word)
ch <- word
}
 
func timeout(t chan bool) {
time.Sleep(5 * time.Second)
t <- true
}
 
func main() {
t := make(chan bool)
go timeout(t)
 
ch := make(chan string)
go readword(ch)
 
select {
case word := <-ch:
fmt.Println("Примио", word)
case <-t:
fmt.Println("Истекло време.")
}
}
</source>
 
== Референце ==