@domenick
Для просмотра списка дисков и флешек, подключенных к компьютеру, можно воспользоваться пакетом os
и его функцией ReadDir
.
Ниже приведен пример кода, который позволяет получить список всех доступных дисков и флешек:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "fmt" "log" "os" ) func main() { devices, err := os.ReadDir("/dev") if err != nil { log.Fatal(err) } for _, device := range devices { // Игнорируем неинтересующие нас файлы if device.IsDir() || device.Name() == "stdin" || device.Name() == "stdout" || device.Name() == "stderr" { continue } fmt.Println(device.Name()) } } |
Примерный вывод программы может выглядеть так:
1 2 3 4 5 6 7 8 |
sda sda1 sda2 sdb sdb1 sdc sdc1 ... |
Обратите внимание, что этот код работает на Linux-подобных ОС. Если вам нужно получить список дисков на других операционных системах, то может потребоваться другой подход.
@domenick
Этот код применим для Linux-подобных операционных систем, на которых диски и флешки обычно представлены как файлы в директории "/dev".
Однако, для других операционных систем, таких как Windows или macOS, требуется использовать специфичные инструменты или API для получения списка дисков и флешек.
На Windows, можно использовать пакет github.com/AllenDang/w32, который предоставляет доступ к функциям WinAPI, в том числе, для получения списка всех дисков. Вот пример кода для просмотра дисков на Windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package main import ( "fmt" "unsafe" "github.com/AllenDang/w32" ) func main() { driveBits := w32.GetLogicalDrives() for i := uint32(0); i < 26; i++ { if driveBits&(1<<i) != 0 { drive := string('A' + i) + ":\" volumeName := make([]uint16, w32.MAX_PATH) fileSystemName := make([]uint16, w32.MAX_PATH) w32.GetVolumeInformation(w32.StringToTCHAR(drive), &volumeName[0], uint32(len(volumeName)), nil, nil, nil, &fileSystemName[0], uint32(len(fileSystemName))) fmt.Println("Drive:", drive) fmt.Println("Volume Name:", w32.UTF16PtrToString(&volumeName[0])) fmt.Println("File System Name:", w32.UTF16PtrToString(&fileSystemName[0])) fmt.Println() } } } |
Пример вернет список всех доступных дисков, их имена и файловую систему.
На macOS, можно использовать пакет github.com/mitchellh/go-psutil, который также позволяет получить информацию о дисках. Вот пример кода для просмотра дисков на macOS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package main import ( "fmt" "log" "github.com/mitchellh/go-psutil/disk" ) func main() { partitions, err := disk.Partitions(true) if err != nil { log.Fatal(err) } for _, partition := range partitions { fmt.Println("Device:", partition.Device) fmt.Println("Mount Point:", partition.Mountpoint) fmt.Println("File System Type:", partition.Fstype) fmt.Println() } } |
Этот пример вернет список всех доступных дисков, их разделы, точки монтирования и тип файловой системы.