-
-
Save novalagung/13c5c8f4d30e0c4bff27 to your computer and use it in GitHub Desktop.
package main | |
import ( | |
"fmt" | |
"io" | |
"os" | |
) | |
var path = "/Users/novalagung/Documents/temp/test.txt" | |
func main() { | |
createFile() | |
writeFile() | |
readFile() | |
deleteFile() | |
} | |
func createFile() { | |
// detect if file exists | |
var _, err = os.Stat(path) | |
// create file if not exists | |
if os.IsNotExist(err) { | |
var file, err = os.Create(path) | |
if isError(err) { return } | |
defer file.Close() | |
} | |
fmt.Println("==> done creating file", path) | |
} | |
func writeFile() { | |
// open file using READ & WRITE permission | |
var file, err = os.OpenFile(path, os.O_RDWR, 0644) | |
if isError(err) { return } | |
defer file.Close() | |
// write some text line-by-line to file | |
_, err = file.WriteString("halo\n") | |
if isError(err) { return } | |
_, err = file.WriteString("mari belajar golang\n") | |
if isError(err) { return } | |
// save changes | |
err = file.Sync() | |
if isError(err) { return } | |
fmt.Println("==> done writing to file") | |
} | |
func readFile() { | |
// re-open file | |
var file, err = os.OpenFile(path, os.O_RDWR, 0644) | |
if isError(err) { return } | |
defer file.Close() | |
// read file, line by line | |
var text = make([]byte, 1024) | |
for { | |
_, err = file.Read(text) | |
// break if finally arrived at end of file | |
if err == io.EOF { | |
break | |
} | |
// break if error occured | |
if err != nil && err != io.EOF { | |
isError(err) | |
break | |
} | |
} | |
fmt.Println("==> done reading from file") | |
fmt.Println(string(text)) | |
} | |
func deleteFile() { | |
// delete file | |
var err = os.Remove(path) | |
if isError(err) { return } | |
fmt.Println("==> done deleting file") | |
} | |
func isError(err error) bool { | |
if err != nil { | |
fmt.Println(err.Error()) | |
} | |
return (err != nil) | |
} |
Helpful for me
Like some of you have already suggested, this approach has some bugs. Remember that "defers will not be run when using os.Exit" (https://gobyexample.com/exit).
I fix that issue here: https://gist.github.com/joe94/9725e84392654fbb68ff16053ea6d5bf
@milosgajdos83 @joe94 thanks for the responses. I just modified the file for better logging. also all os.Exit()
statements are removed now
cool!
Hey, this came in handy. I'd rather read code than words explaining it. thanks!
thanks !
I am getting " undefine: isError"
Helped me, thanks.
Suwun cak noval
Thanks mate!
Did you know that you can also use the ioutil functions?
import "io/ioutil"
// read file
bytes,err:= ioutil.ReadFile(filename)
if err!=nil{
panic(err)
}
mystringdata:=string(bytes[:])
//write file
err:=ioutil.WriteFile("myfile.txt",[]byte("write this to file"),0644)
if err!=nil{
panic(err)
}
I think it has an issue in createFile() function. Because I tested the code without test.txt file in the path but there isn't "test.txt" file after running the code.
@milosgajdos83 Would that matter though? Because if the program is exiting, it doesn't need to run the deferred functions. Either way, he could've just used fmt.Fatal().