U ranije prikazanom primeru 2, koji štampa raspored kraljica na tabli, imali smo tablu predstavljenu kao dvodimenzionalni niz stringova 8X8 – [8][8]string, i svaki string je sadržao tačku, kao onaku praznog polja, ili ♛ ako je neka od osam kraljica na datom polju. Pošto je polje [0][0] na našem prikazu dole levo, morali smo početi od zadnjeg reda i štampati jedan po jedan red prema prvom, odnosno od reda [7] do reda [0]:
for i := 7; i >= 0; i-- { fmt.Printf("%d %v\n", i+1, tabla[i]) }
Za potrebe štampanja usvojenog modela šahovske table [8]int možemo napraviti privremeni dvodimenzionalni niz [8][8]string, popuniti ga iz [8]int i odštampati kao u ranijem primeru.
// primer 4 package main import ( "fmt" "math/rand" ) type šahovskaTabla [8]int func (t šahovskaTabla) Print() { var redovi [8][8]string var prazanRed = [8]string{".", ".", ".", ".", ".", ".", ".", "."} // inicijalizacija redova for red := 0; red < 8; red++ { redovi[red] = prazanRed } for i := 0; i < 8; i++ { redovi[t[i]][i] = "♛" } for i := 7; i >= 0; i-- { fmt.Printf("%d %v\n", i+1, redovi[i]) } fmt.Printf(" a b c d e f g h\n %v\n", t) } var tabla šahovskaTabla func main() { //rand.Seed(time.Now().UnixNano()) for i := 0; i < 8; i++ { tabla[i] = rand.Intn(8) } tabla.Print() }
Ovde prikazani program generiše sledeći izlaz:
8 [. ♛ ♛ . . . . .] 7 [. . . . . ♛ . .] 6 [. . . . . . . .] 5 [. . . . . . . ♛] 4 [. . . ♛ . . . .] 3 [. . . . . . . .] 2 [♛ . . . ♛ . ♛ .] 1 [. . . . . . . .] a b c d e f g h [1 7 7 3 1 6 1 4]
što nas dovodi do kratke priče o generatoru slučajnih brojeva.
U primeru 4 smo našu šahovsku tablu [8]int deklarisali kao tip šahovskaTabla, i omogućili da se nad promenljivama tog tipa izvrši funkcija Print() koja štampa trenutni raspored kraljica.