Go (програмски језик) — разлика између измена
Садржај обрисан Садржај додат
м Разне исправке; козметичке измене |
Нема описа измене |
||
Ред 9:
|настанак = {{start date and age|2009|11|10}}
|аутори = -{[[Google Inc.]]}-, доприносиоци из заједнице [[отворени код|отвореног кода]]
|дизајнери = Роберт Грисемер<br
|актуелна верзија = 1.6
|датум актуелне верзије = {{start date and age|2016|02|17}}
Ред 23:
}}
'''Гоу''' ({{јез-енгл|Go}}) је [[програмски језик]] [[отворени код|отвореног кода]] настао у [[Гугл]]у 2007. године. Језик су осмислили Роберт Грисемер, Роб Пајк и [[Кен Томпсон]], а намењен је првенствено [[системско програмирање|системском програмирању]]. Ослањајући се на традицију језика [[C (програмски језик)|C]] и [[Паскал (програмски језик)|Паскал]], језик је компилиран, са статичким типовима података, ограниченим структурним типовима, садржи аутоматско управљање меморијом и функционалности за конкурентно програмирање инспирисане [[комуницирајући секвенцијални процеси|комуницирајућим секвенцијалним процесима]].
Почетак рада на језику је септембар [[2007|2007.]] године. Званично је промовисан новембра [[2009|2009.]] године под [[BSD licence|модификованом -{''BSD''}- лиценцом]]. Данас се користи за мрежне програме, најпре у оквиру Гуглових система. Постоје две главне имплементације језика: ''gc'', који је главна имплементација коју је развио Гугл и ''gccgo'' из [[ГНУ колекција компајлера|ГНУ колекције компајлера]]. До верзије 1.5, gc имплементација је била написана у мешавини C, [[асемблер]] и Гоу кода, а од верзије 1.5, C код је преведен у Гоу.
== Историја ==
Линија 51 ⟶ 49:
** Једноставно управљање пакетима (<code>go get</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>
== Референце ==
|