Флешки-не флешки, но вот с логическими дисками кейс разбирался на StackOverflow, предложены были 2 решения:
1) Простое - попробовать получить файловый дескриптор для корневой директории логических дисков с каждой буквой от A к Z:
func getdrives() (r []string){
for _, drive := range "ABCDEFGHIJKLMNOPQRSTUVWXYZ"{
_, err := os.Open(string(drive)+":\\")
if err == nil {
r = append(r, string(drive))
}
}
return
}
2) Правильный, но OS-зависимый вариант (впрочем, первый тоже ос-зависимый): вызвать функцию WinApi getLogicalDrives, котоорая возвращает битовую маску доступных логических дисков:
//переводит битмаску в буквы
func bitsToDrives(bitMap uint32) (drives []string) {
availableDrives := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < 32; i++ {
if bitMap&1 == 1 {
drives = append(drives, availableDrives[bitMap&1])
}
bitMap >>= 1
}
return
}
func main() {
kernel32, _ = syscall.LoadLibrary("kernel32.dll")
getLogicalDrivesHandle, _ = syscall.GetProcAddress(kernel32, "GetLogicalDrives")
if ret, _, callErr := syscall.Syscall(uintptr(getLogicalDrivesHandle), 0, 0, 0, 0); callErr != 0 {
// handle error
} else {
bitsToDrives(uint32(ret))
}
}
Источник.