DEV Community

taijidude
taijidude

Posted on • Edited on

2 2

Golang Working With Files...

Today a short one again. I have played around with some go again and wanted to write it down. There are multiple options to some of the stuff i did. So this is not a comprehensive guide.

Check if file exists

func fileExists(fileName string) (bool, error) {
    info, err := os.Stat(fileName)
    if err != nil {
        if os.IsNotExist(err) {
            return false, nil
        } else {
            return false, err
        }
    }
    return !info.IsDir(), nil
}
Enter fullscreen mode Exit fullscreen mode

Create a file and write text to it

created, err = os.Create("test.txt")
if err != nil {
    log.Fatal(err)
}

//write to text file
//i ignore the number of bytes writen here
_, err = created.WriteString("Hello World")
if err != nil {
    log.Fatal(err)
}

//Close the file so it can be used later
created.Close()
Enter fullscreen mode Exit fullscreen mode

Learned a lesson here. In my first version i wrote defer created.close(). But than later ran into problems, when i wanted to read from the file. So you need to close the file if you want to read from it in the same function.

Delete a file

created, err = os.Create("toDelete.txt")
if err != nil {
   log.Fatal(err)
}
created.Close()

err := os.Remove("toDelete.txt")
if err != nil {
   log.Fatal(e)
}

Enter fullscreen mode Exit fullscreen mode

Read from a text file - 1

anotherFile, err := os.Open("anotherFile.txt")
if err != nil {
    log.Fatal(err)
}
scanner := bufio.NewScanner(anotherFile)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

if err := scanner.Err(); err != nil {
    log.Fatal(err)
}
Enter fullscreen mode Exit fullscreen mode

Read from a text file - 2

content, err := os.ReadFile(fileName)

if err != nil {
    log.Fatal(err)
}
//The content is a []byte because of that: string(...)
fmt.Println(string(content))
}
Enter fullscreen mode Exit fullscreen mode

Not much to adress here. I slowy see the verbosity of go. Haven't made up my mind about the language yet.

Copy or move a file

//copy a file
bytesRead, err := ioutil.ReadFile("fileToCopy.txt")
if err != nil {
    log.Fatal(err)
}
ioutil.WriteFile("cptrgt/CopyTarget.txt", bytesRead, os.ModePerm)

//Move a file
err = os.Rename("oldFile.txt", "cptrgt/newFile.txt")
if err != nil {
    log.Fatal(err)
}
Enter fullscreen mode Exit fullscreen mode

Don't like how to move a file. Not a catastrophe but also not really intuitive either. Have not tested the copy speeds yet.

Create and recursivly delete a Folder

//create a new Folder
if err := os.Mkdir("cptrgt", os.ModePerm); err != nil {
    log.Fatal(err)
}

//delete a folder recursively
err := os.RemoveAll("cptrgt")
if err != nil {
    log.Fatal(err)
}
Enter fullscreen mode Exit fullscreen mode

After my last post i was happy a about the syntax but now i stumble more and mor about how verbose it is. Honestly i would say i'm not sold on go for quick commandline tools. I see the great performance and simple deployment, but at the moment i wouldn't trade it for python, java or the powershell. But i will keep learning and maybe i will be convinced.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)