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.
A megjegyzések a C++-ban megszokottak:
//
-rel kezdődik és az adott sor végéig tart;/*
-gal kezdődik és a */
-ig tart.space
-ként kerülnek értelmezésre.
A megjegyzések nem ágyazhatók egymásba.
Az alábbi karaktersorozatok kulcsszavak. A kulcsszavak nem használhatók azonosítóként.
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:
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:
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.
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:
break
, continue
, fallthrough
vagy return
kulcsszavak egyike, vagy++
, --
, )
, ]
vagy }
)
, 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.:
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 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 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.
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:
"
jelek közé téve a stringekben nem lehet sortörés (értelmezett/interpretált string).`
jelek közé téve a fordító nem értelmezi az escape szekvenciákat, valamint több soron át is tarthat a szöveg. Lényegében a `
karakteren kívül minden más, a fájlban előforduló karaktert a string részeként értelmez a fordító (nem értelmezett/uninterpreted string).Egykarakteres escape-szekvenciák:
Unicode kódpontokat kijelölő szekvenciák:
\
után három oktális számjegy (a reprezentált érték nem lehet 255-nél nagyobb),\x
után két hexadecimális számjegy,\u
után négy hexadecimális számjegy,\U
után nyolc hexadecimális számjegy.Konstans lehet:
cap
, len
, real
, imag
, complex
),true
és false
logikai konstansok,iota
konstans (ld. konstans kifejezés).
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 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.