How to resolve the algorithm File input/output step by step in the Go programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm File input/output step by step in the Go programming language
Table of Contents
Problem Statement
Create a file called "output.txt", and place in it the contents of the file "input.txt", via an intermediate variable. In other words, your program will demonstrate:
Oneliners that skip the intermediate variable are of secondary interest — operating systems have copy commands for that.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm File input/output step by step in the Go programming language
First Code:
- Imports the
ioutil
package for file I/O. - In the
main
function:- Reads the contents of
input.txt
into theb
variable usingioutil.ReadFile
. - Checks for any errors while reading the file.
- Writes the contents of
b
tooutput.txt
usingioutil.WriteFile
. - Sets the file permissions to 0666.
- Reads the contents of
- This code simply copies the contents of
input.txt
tooutput.txt
.
Second Code (Refactored):
- Imports the
io
,log
, andos
packages. - Defines a function
CopyFile
that takes two strings for input and output file paths. - In the
CopyFile
function:- Opens both input and output files using
os.Open
andos.Create
, respectively. - Checks for any errors while opening the files.
- Opens both input and output files using
- In the
main
function:- Calls
CopyFile
with "output.txt" and "input.txt" as arguments. - Handles any errors that occur during file copying using
log.Fatal
.
- Calls
Improvements:
The second code is an improvement over the first one in several ways:
- It uses a separate function for copying files, making the code more modular and reusable.
- It opens and closes files using the
defer
construct, ensuring proper resource management even in the event of errors. - It uses the
io.Copy
function for copying file contents, which is more efficient and handles large files better than manually reading and writing bytes. - It uses
log.Fatal
to handle errors, which simplifies error handling compared to printing errors to the console usingfmt.Println
.
Source code in the go programming language
package main
import (
"fmt"
"io/ioutil"
)
func main() {
b, err := ioutil.ReadFile("input.txt")
if err != nil {
fmt.Println(err)
return
}
if err = ioutil.WriteFile("output.txt", b, 0666); err != nil {
fmt.Println(err)
}
}
package main
import (
"io"
"log"
"os"
)
func CopyFile(out, in string) (err error) {
var inf, outf *os.File
inf, err = os.Open(in)
if err != nil {
return
}
defer func() {
cErr := inf.Close()
if err == nil {
err = cErr
}
}()
outf, err = os.Create(out)
if err != nil {
return
}
_, err = io.Copy(outf, inf)
cErr := outf.Close()
if err == nil {
err = cErr
}
return
}
func main() {
if err := CopyFile("output.txt", "input.txt"); err != nil {
log.Fatal(err)
}
}
You may also check:How to resolve the algorithm Metaprogramming step by step in the Rust programming language
You may also check:How to resolve the algorithm Convert seconds to compound duration step by step in the J programming language
You may also check:How to resolve the algorithm Here document step by step in the Phix programming language
You may also check:How to resolve the algorithm Elementary cellular automaton/Infinite length step by step in the Tcl programming language
You may also check:How to resolve the algorithm Program termination step by step in the REBOL programming language