A Go programozási nyelv

Nyelvi elemek

Jelkészlet

A Go forráskód mindig UTF-8 karakterkódolású. Minden Unicode karakterpont külön betűnek számít, tehát például a kis- és nagybetűket is megkülönbözteti a nyelv. Az UTF-8 kód nem kanonizáltan értelmezett, azaz ha egy ékezetes karaktert kombináló jelekkel írunk le, az nem ugyanaz, mintha egy jelként reprezentálnánk.

Egyes implementációk kompatibilitási okokból tilthatják a a NUL karakter (U+0000) használatát a forrásszövegben.

Megjegyzések

A megjegyzések a C++-ban megszokottak:

Egy többsoros megjegyzés, mely egy vagy több sortörést tartalmaz, a forráskód értelmezése során sortörésnek számít - azok a megjegyzések, melyek nem tartalmaznak sortörést, space-ként kerülnek értelmezésre.

A megjegyzések nem ágyazhatók egymásba.

Kulcsszavak

Az alábbi karaktersorozatok kulcsszavak. A kulcsszavak nem használhatók azonosítóként.

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var

Azonosítók

Az azonosítók tetszőleges Unicode betűvel vagy alulvonással (U+005F) kezdődhetnek, majd ugyanezekkel, illetve számokkal folytatódhatnak.

Néhány azonosítónak előre definiált jelentése van. Ezek:

Alaptípusok: bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 Architektúra-specifikus "kényelmi" típusok: complex float int uint uintptr Konstansok: true false iota Zéróérték: nil Függvények: append cap close complex copy delete imag len make new panic print println real recover

A legtöbb implementáció biztosítja az alábbi két beépített függvényt is a diagnosztika támogatására:

print # minden argumentumát kiírja (a kiírási formátum implementációnként eltérő lehet) println # működése a print-hez hasonló, de az argumentumok közé elhelyez egy-egy space karaktert, a kiírást pedig sortöréssel zárja le

Létezik még az üres azonosító (_) is, ezt olyan helyeket használjuk, amikor ott kell lennie egy azonosítónak, de nem akarunk hivatkozni rá (például a for ciklus range-es verziójnál).

A nem használt változót (vagy importált csomagot, ld. Csomagok) tartalmazó programot a fordító visszautasítja.

Operátorok és egyéb elválasztójelek

Az alábbi jelek operátorok vagy egyéb elválasztó szereppel rendelkeznek
+ & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^=

Az utasítások lezárása

Az utasításokat a nyelvben mindig pontosvessző zárja, ám ezt általában nem kell a programozónak kiírnia. A fordító ugyanis a nemüres sorok végére a forrásszöveg feldolgozása során beszúrja a hiányzó pontosvesszőket, ha a sor végén:

áll. Összetett kifejezések belsejében a több sorba törhetőség érdekében a fordító nem szúr be pontosvesszőt a sorvégi ), ill. } után.

A nyelv készítői a pontosvessző elhagyását ajánlják, ahol csak lehetséges.

A pontosvesszők automatikus elhelyezése egy megkötést von maga után: minden blokknak, amelyhez fejléc tartozik (pl. függvénydeklaráció, elágazás, stb.), a nyitó { zárójele a fejléccel egy sorba kell, hogy kerüljön. Pl.:

// Helyes func f() int { ... } // Helytelen, a fordító a blokk elé beszúr egy ;-t, és a blokknak semmi köze nem lesz a függvényhez func g() rune { ... }

Literálok

Egész literálok

Egy egész literál Unicode számjegyek sorozata. A literál speciális bevezetésével megadható 8-as (a 0 (nulla) vezeti be), illetve 16-os (0x vagy 0X vezeti be) számrendszerbeli szám is.

A hexadecimális literálok esetén a nyelv nem tesz különbséget a kis- és nagybetűk között (tehát pl. 0x1A azonos 0X1a-val).

Lebegőpontos literálok

Lebegőpontos literálok csak 10-es számrendszerbeli alakban adhatók meg. A vezető nullák ebben az esetben eldobásra kerülnek.

Egy lebegőpontos literál egészrészből, tizedespontból, törtrészből és exponensből áll. Az egészrész és a törtrész közül legfeljebb az egyik elhagyható (ekkor az értéke 0 lesz). Az exponens formája a "szokásos": az e (vagy E) karaktert követi a kitevő.

Képzetes literálok

Képzetes literálok szintén csak 10-es számrendszerben adhatók meg, a vezető nullákat a fordító elhagyja.

Képzetes literál egy (10-es számrendszerbeli) egész, vagy lebegőpontos literálból és az azt követő (kis) i karakterből áll.

Képzetes literál adja egy komplex konstans (ld. Konstansok) képzetes részét.

Karakter és string literálok

A karaktereket ' jelek közé kell tenni. A karakterek a Unicode tábla egy kódpozícióját kódolják, ezért egész szám típusú konstansnak számítanak.

A '-k közötti egyetlen karakter saját magát jelöli. Az egyéb lehetőségeket (escape szekvenciák) ld. lejjebb.

String literálokban a karakterek esetén megadott escape szekvenciák mind megengedettek.

A stringeket megadásának két módja van:

String és karakter literálokban az alábbi escape szekvenciák fordulhatnak elő:

Egykarakteres escape-szekvenciák:

\a # U+0007 "csengő" (alert/bell) \b # U+0008 backspace \f # U+000C form feed \n # U+000A sortörés/újsor \r # U+000D kocsivissza (carriage return) \t # U+0009 vízszintes tabulátor \v # U+000b függőleges tabulátor \\ # U+005c fordított perjel (backslash) \' # U+0027 aposztróf (csak karakter literálokban használható) \" # U+0022 idézőjel (csak string literálokban használható)

Unicode kódpontokat kijelölő szekvenciák:

Konstansok

Konstans lehet:

A konstansokhoz rendelhetünk típust a deklarációkor, de ez nem kötelező (ld. konstans-deklaráció). Utóbbi esetben (nemtípusos konstansok) a szám konstansok tetszőleges pontosságúak, soha nem csordulnak túl, és mindig a használat helyétől függ a tényleges méretük. A literál konstansok, a logikai konstansok, az iota és azon konstans kifejezések, melyek csak nemtípusos konstansokat tartalmaznak, maguk is nemtípusosak.

Egyes fordítóprogramok megvalósíthatják a nemtípusos konstansokat nem tetszőleges, csupán "kellően nagy" pontossággal. A fordítókra vonatkozó pontos elvárások a Go Language Reference - Constants fejezetében olvashatók.

Komplex konstans

Komplex konstansokat a complex(re, im) beépített függvénnyel képezhetünk, ha azt két karakter, egész vagy lebegőpontos konstansra alkalmazzuk.

Nemtípusos komplex konstanst kapunk, ha a complex(re, im) függvényt alkalmazzuk két nemtípusos karakter, egész vagy lebegőpontos konstansra.