Golang中的底层磁盘I / O

Wondering if there has been anyone experimenting with low-level disk I/O, such as reading raw sectors, MBR, etc. I've done some digging around myself, but haven't been able to find anything mentioned about it. Most of it is dead ends where someone is talking about Go's native io package.

Any leads would be appreciated.

I am still new to go so my example is not particularly elegant, but I think this is what you want:

package main

import (
    "syscall"
    "fmt"
)

func main() {
    disk := "/dev/sda"
    var fd, numread int
    var err error

    fd, err = syscall.Open(disk, syscall.O_RDONLY, 0777)

    if err != nil {
        fmt.Print(err.Error(), "
")
        return
    }

    buffer := make([]byte, 10, 100)

    numread, err = syscall.Read(fd, buffer)

    if err != nil {
        fmt.Print(err.Error(), "
")
    }

    fmt.Printf("Numbytes read: %d
", numread)
    fmt.Printf("Buffer: %b
", buffer)

    err = syscall.Close(fd)

    if err != nil {
        fmt.Print(err.Error(), "
")
    }
}

Here is a link to the syscall package documentation: http://golang.org/pkg/syscall/

According to this page, this package attempts to be compatible with as many different platforms as possible but it kinda seems to my novice eye like the main target is the Linux API with, of course, go idioms to simplify things. I hope this answers your question!

It seems it is already late, but it might be interesting for somebody else. There is an interesting example of how to work with MBR on Windows: GoogleCloudPlatform/compute-image-tools

and they use package golang.org/x/sys/windows