Go goroutines未执行

I am trying to achieve some sort of multi-thread processing over here.

func (m *Map) Parse(mapData Node) error {
    wg := &sync.WaitGroup{}
    for _, node := range mapData.child {
        wg.Add(1)
        go parseChild(node, m, wg)
    }
    wg.Wait()
    close(errors)
    return nil
}

func parseChild(node Node, m *Map, wg *sync.WaitGroup) {
    defer wg.Done()
    var nodeType uint8
    if err := binary.Read(node.data, binary.LittleEndian, &nodeType); err != nil {
        errors <- err
    }
    if nodeType == OTBMNodeTowns {
        for _, town := range node.child {
            var nodeType uint8

            if err := binary.Read(town.data, binary.LittleEndian, &nodeType); err != nil {
                errors <- err
                return
            }
            if nodeType != OTBMNodeTown {
                errors <- fmt.Errorf("Parsing map towns: expected %v got %v", OTBMNodeTown, nodeType)
                return
            }
            currentTown := Town{}
            if err := binary.Read(town.data, binary.LittleEndian, &currentTown.ID); err != nil {
                errors <- err
                return
            } else if currentTown.Name, err = town.ReadString(); err != nil {
                errors <- err
                return
            } else if currentTown.TemplePosition, err = town.ReadPosition(); err != nil {
                errors <- err
                return
            }
            m.Towns = append(m.Towns, currentTown)
            errors <- fmt.Errorf("This should be called: %v, nodeType)
            return
        }
    }
}

But my goroutine never sends anything to the errors channel. Seems to be that the main thread is not waiting for the goroutines to even finish

I have no idea what I am missing here. Im waiting for all routines to finish using wg.Wait but doesnt seem to be working as I think it should

And yes. the slice is populated with atleast 3 results. This is the errrors channel

var (
    errors = make(chan error, 0)
)

func init() {
    go errChannel()
}

func errChannel() {
    for {
        select {
        case err := <-errors:
            log.Println(err)
        }
    }
}