转到使用频道进行备用打印

I want my code to print:

12AB34CD56EF78GH910IJ

but it prints:

12AB3456CDEF78910GHIJ

I am so confused and I think it is strange.

package main

import (
    "fmt"
    "sync"
)

func main() {
    numdone := make(chan int)
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
            defer wg.Done()
            data := []byte("ABCDEFGHIJ")
            for i := 0; i < 10; i = i + 2 {
                    <-numdone
                    fmt.Printf("%c", data[i])
                    fmt.Printf("%c", data[i+1])
            }
    }()

    wg.Add(1)
    go func() {
            defer wg.Done()
            for i := 1; i < 11; i = i + 2 {
                    fmt.Printf("%d", i)
                    fmt.Printf("%d", i+1)
                    numdone <- i
            }
    }()

    wg.Wait()
}

Please read my comment above. To synchronize, just use a mutex and it'll work:

package main

import (
    "fmt"
    "sync"
)

var mu sync.Mutex

func main() {
    numdone := make(chan int)
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        data := []byte("ABCDEFGHIJ")
        for i := 0; i < 10; i = i + 2 {
            <-numdone
            fmt.Printf("%c", data[i])
            fmt.Printf("%c", data[i+1])
            mu.Unlock()
        }
    }()

    wg.Add(1)
    go func() {
        defer wg.Done()
        for i := 1; i < 11; i = i + 2 {
            mu.Lock()
            fmt.Printf("%d", i)
            fmt.Printf("%d", i+1)
            numdone <- i
        }
    }()

    wg.Wait()
}

Playground : https://play.golang.org/p/71Dv0iKTy_