Go, 2-dimensional array (or slice) of struct

45 Views Asked by At

The following go-code works fine:

package main
import (
    "fmt"
)
type Node struct {
    north int
    east  int
    south int
    west  int
}
func main() {
    roomsX := 5
    roomsY := 5
    test := [5][5]Node{}
    for x := 0; x < roomsX; x++ {
        for y := 0; y < roomsY; y++ {
            test[x][y] = Node{}
        }
    }
    fmt.Println(test)
    fmt.Println(test[0][0].north)
    fmt.Println(test[4][4].north)
}

... but if I use variables instead of numbers it doesn't:

    test := [roomsX][roomsY]Node{}

getting the following errors:

test2.go:17:11: invalid array length roomsX, test2.go:17:19: invalid array length roomsY

I think it must be possible by using slice but I didn't find how to do it!

1

There are 1 best solutions below

1
Swiftiti On

I found how to use a slice instead of an array:

package main

import (
    "fmt"
)

type Node struct {
    north int
    east  int
    south int
    west  int
}

func main() {
    roomsX := 6
    roomsY := 5
    test := make([][]Node, roomsX)
    for i := range test {
        test[i] = make([]Node, roomsY)
    }
    for x := 0; x < roomsX; x++ {
        for y := 0; y < roomsY; y++ {
            test[x][y] = Node{}
        }
    }
    fmt.Println(test)
    fmt.Println(test[0][0].north)
    fmt.Println(test[4][4].north)
}

... but now I want to have [test] as global, defining it outside the main function, does anyone know how to do it?