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.