Go

File I/O

Syntax#

  • file, err := os.Open(name) // Opens a file in read-only mode. A non-nil error is returned if the file could not be opened.
  • file, err := os.Create(name) // Creates or opens a file if it already exists in write-only mode. The file is overwritten to if it already exists. A non-nil error is returned if the file could not be opened.
  • file, err := os.OpenFile(name, flags, perm) // Opens a file in the mode specified by the flags. A non-nil error is returned if the file could not be opened.
  • data, err := ioutil.ReadFile(name) // Reads the entire file and returns it. A non-nil error is returned if the entire file could not be read.
  • err := ioutil.WriteFile(name, data, perm) // Creates or overwrites a file with the provided data and UNIX permission bits. A non-nil error is returned if the file failed to be written to.
  • err := os.Remove(name) // Deletes a file. A non-nil error is returned if the file could not be deleted.
  • err := os.RemoveAll(name) // Deletes a file or whole directory hierarchy. A non-nil error is returned if the file or directory could not be deleted.
  • err := os.Rename(oldName, newName) // Renames or moves a file (can be across directories). A non-nil error is returned if the file could not be moved.

Parameters#

Parameter Details
name A filename or path of type string. For example: "hello.txt".
err An error. If not nil, it represents an error that occurred when the function was called.
file A file handler of type *os.File returned by the os package file related functions. It implements an io.ReadWriter, meaning you can call Read(data) and Write(data) on it. Note that these functions may not be able to be called depending on the open flags of the file.
data A slice of bytes ([]byte) representing the raw data of a file.
perm The UNIX permission bits used to open a file with of type os.FileMode. Several constants are available to help with the use of permission bits.
flag File open flags that determine the methods that can be called on the file handler of type int. Several constants are available to help with the use of flags. They are: os.O_RDONLY , os.O_WRONLY , os.O_RDWR , os.O_APPEND, os.O_CREATE, os.O_EXCL, os.O_SYNC, and os.O_TRUNC.
## Reading and writing to a file using ioutil
A simple program that writes “Hello, world!” to test.txt, reads back the data, and prints it out. Demonstrates simple file I/O operations.
package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    hello := []byte("Hello, world!")

    // Write `Hello, world!` to test.txt that can read/written by user and read by others 
    err := ioutil.WriteFile("test.txt", hello, 0644)
    if err != nil {
        panic(err)
    }

    // Read test.txt
    data, err := ioutil.ReadFile("test.txt")
    if err != nil {
        panic(err)
    }

    // Should output: `The file contains: Hello, world!`
    fmt.Println("The file contains: " + string(data))
}

Listing all the files and folders in the current directory

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        panic(err)
    }

    fmt.Println("Files and folders in the current directory:")

    for _, fileInfo := range files {
        fmt.Println(fileInfo.Name())
    }
}

Listing all folders in the current directory

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        panic(err)
    }

    fmt.Println("Folders in the current directory:")

    for _, fileInfo := range files {
        if fileInfo.IsDir() {
            fmt.Println(fileInfo.Name())
        }
    }
}

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow