Recursive Mergesort using goroutines
Keep your global environment clean - no need to define nums and numVals globally. Just create them in the main function and pass them to the appropriate functions.

nums := initSlice(size)

You can save on memory by creating the sortArr array at the initialization phase, and pass it along with arr.

go mergeSort(arr[:len(arr)/2], res[:len(sortArr)/2], leftMS)
go mergeSort(arr[len(arr)/2:], res[len(sortArr)/2:], rightMS)

You can init numVals to 100 and then change it if an arg was provided:

size := 100
if len(os.Args) &gt;= 2 {
    size, _ = strconv.Atoi(os.Args[1])
}

Add a buffer to leftMS and rightMS. This way their goroutines will be closed when they are done. Currently if the right side is done before the left, then it will have to wait because you are reading leftMS first.

leftMS, rightMS := make(chan []byte, 1), make(chan []byte, 1)

Comments always start with an empty space: //Combine both sides -> // Combine both sides