Read CSV files and find the same values on the specific columns
Pointers to chan

Channel variables are references to an underlying data structure.
As such, in terms of resources, I don't think you gain anything at all by passing a *chan instead of the chan itself.
I re-read the section on channels in Effective Go,
and there's no mention about saving resources by passing around pointers,
and it's not logical.
So I think you can safely stop using a pointer for this and simplify the code.

Likely bug

This can be simplified:


isExistAll := false
for _, data := range datas {
    if data[value] {
        isExistAll = true
    } else {
        isExistAll = false
    }
}



You can use the value of data[value] directly:

isExistAll := false
for _, data := range datas {
    isExistAll = data[value]
}


But I don't think this code does what you intended.
The value of isExistAll will be the value of the last data[value].
I think you want it to be true only of all values are true:

isExistAll := true
for _, data := range datas {
    isExistAll = isExistAll &amp;&amp; data[value]
}


Constructing paths

Instead of concatenating strings like dir + file.Name() to create paths,
it's better to use path.Join(dir, file.Name()).