Accessing All Windows Drives in Go
In Go, retrieving a comprehensive listing of all drives on a Windows system requires a specific approach. To avoid manual specification of drive letters like "program.exe C:" for each drive, a dynamic solution is sought.
By utilizing the GetLogicalDrives function from the kernel32.dll, it's possible to obtain a bit map representing available drives. The bitsToDrives function converts this bit map into a list of corresponding drive letters, such as ["A", "B", "C",...].
The following Go code demonstrates this approach:
<code class="go">package main import ( "fmt" "syscall" ) func main() { kernel32, _ := syscall.LoadLibrary("kernel32.dll") getLogicalDrivesHandle, _ := syscall.GetProcAddress(kernel32, "GetLogicalDrives") var drives []string if ret, _, callErr := syscall.Syscall(uintptr(getLogicalDrivesHandle), 0, 0, 0, 0); callErr != 0 { // handle error } else { drives = bitsToDrives(uint32(ret)) } fmt.Printf("%v", drives) } func bitsToDrives(bitMap uint32) (drives []string) { availableDrives := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} for i := range availableDrives { if bitMap&1 == 1 { drives = append(drives, availableDrives[i]) } bitMap >>= 1 } return }</code>
Using this method, you can now iterate through all drives on a Windows system seamlessly, without relying on user-specified drive letters.
The above is the detailed content of How to Access All Windows Drives Programmatically in Go?. For more information, please follow other related articles on the PHP Chinese website!