Go (programozási nyelv)
Go | |
Paradigma | compiler által fordított, konkurens, imperatív |
Jellemző kiterjesztés | .go |
Megjelent | 2009 |
Tervező | Robert Griesemer, Rob Pike és Ken Thompson |
Fejlesztő |
|
Utolsó kiadás | 1.23.3 (2024. november 6.)[1] |
Fordítóprogram | gc (8g, 6g), gccgo |
Hatással volt rá | C++ és Python; hatott rá: Limbo, occam |
Operációs rendszer | Linux, Mac OS X, FreeBSD, OpenBSD, MS Windows, Plan 9,[2] Dragonfly BSD, Solaris |
Licenc | BSD[3] |
Weboldal |
A Go a Google által kifejlesztett,[4] compiler által fordított, konkurens programozási nyelv. A nyelvet Robert Griesemer, Rob Pike és Ken Thompson tervezte. A jelenlegi implementációi közül a Gc C nyelvben íródott, szintaktikai elemzésre (parserként) yacc/bison-t használ, míg a Gccgo C++ front-endjét (felhasználóval kapcsolatot tartó réteg) a standard GCC back-endhez (tényleges feldolgozást végző réteg) csatolt rekurzív parser (recursive descent parser) egészíti ki.[5]
A Go szintaxisa a C nyelvéhez áll közel, a típusdeklaráció kivételével; az egyéb szintaktikai eltérések közé tartoznak a for ciklus és a feltételes kifejezés (if) hiányzó zárójelei. A nyelv támogatja a szemétgyűjtést. A Go konkurenciamodellje Tony Hoare CSP-jén alapszik. A kihagyott funkciók közé tartozik a kivételkezelés, az öröklődés, a generikus programozás és a metódusok újradefiniálása (method overriding). A Javától és a C++-tól eltérően a map-ek (asszociatív tömbök) beépített nyelvi elemek, éppúgy mint a stringek.
Problémák a névvel
[szerkesztés]A Google által a nyelv nevének választott „Go” ütközik a F. G. McCabe és K. L. Clark által 2004-ben kifejlesztett programozási nyelv, a Go! nevével.[6] A problémáról szó van a Google Go-oldalain, jelenleg a legnépszerűbb ötlet az, hogy a Google nyelvét át kellene nevezni „Issue 9”-re.[6]
Példák
[szerkesztés]Hello GO!
[szerkesztés]Az alábbi egy „Helló, világ!”-program Go nyelven.
package main
import "fmt"
func main() {
fmt.Printf("Hello, World\n")
}
Egyszerű echo parancs
[szerkesztés]A Unix echo parancsának egy megvalósítása
package main
import (
"os";
"flag"; // parancssori opciók elemzésére
)
var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
Space = " ";
Newline = "\n";
)
func main() {
flag.Parse(); // az argumentumok listáját végignézi és beállítja a flageket
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);
}
FizzBuzz teszt
[szerkesztés]package main //csomag neve
//Függőségek
import (
"fmt" //Parancssori kiíráshoz...
)
//A program futása a main-ban kezdődik
func main() {
for i := 1; i < 100; i++ { // 1-től 100-ig for ciklus
fizz := ((i % 3) == 0) //osztható-e 3-mal
buzz := ((i % 5) == 0) //osztható-e 5-tel
if fizz && buzz { // Ha mindkettővel: fizzbuzz
fmt.Println("FizzBuzz")
} else if fizz { //ha csak 3-mal Fizz
fmt.Println("Fizz")
} else if buzz { //ha csak 5-tel Buzz
fmt.Println("Buzz")
} else { //Egyébként a szám maga
fmt.Println(i)
}
}
}
Források
[szerkesztés]- ↑ Release History
- ↑ Go Porting Efforts. Go Language Resources. cat-v, 2010. január 12. (Hozzáférés: 2010. január 18.)
- ↑ Text file LICENSE. (Hozzáférés: 2011. január 27.)
- ↑ Google-go-language
- ↑ http://golang.org/doc/go_faq.html#Implementation
- ↑ a b code.google.com
Fordítás
[szerkesztés]- Ez a szócikk részben vagy egészben a Go (programming language) című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
További információk
[szerkesztés]- Interaktív körutazás a Go világába
- The Go language
- Go language FAQ Archiválva 2010. augusztus 18-i dátummal a Wayback Machine-ben
- Index: Saját programnyelvet mutatott be a Google
- Google Go captures developers' imaginations Archiválva 2010. március 4-i dátummal a Wayback Machine-ben
- The Go Programming Language. YouTube
- IRC : go-nuts on irc.freenode.net
- Mailing list : http://groups.google.com/group/golang-nuts